【问题标题】:Using string split instead of array declaration array with substrings使用字符串拆分而不是带有子字符串的数组声明数组
【发布时间】:2013-01-14 06:16:56
【问题描述】:

我经常注意到人们拆分一个子字符串而不是仅仅声明一个必要字符串的数组。

moment.js 中的示例:

langConfigProperties = 'months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem'.split('|'),

jQuery 中的示例

 "Boolean Number String Function Array Date RegExp Object".split(" ")

喜欢这种方式的理由是什么?

【问题讨论】:

  • 我这样做是为了避免必须匹配数组声明中的所有引号。
  • 这不属于 Stack Overflow。一个简短的答案:缩小。这些库被压缩成具有最少空格和短变量名的缩小版本。事实证明,拆分比编写数组文字更短(以字符为单位)。
  • @MattiasBuelens 努力想看看它是如何不适合 SO 的。
  • 这绝对属于 SO

标签: javascript arrays string split


【解决方案1】:

It's way slower to use the .split,但它的优点是代码可以更短(更少字符):

var array = 'months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem'.split('|');
var array = ['months','monthsShort','weekdays','weekdaysShort','weekdaysMin','longDateFormat','calendar','relativeTime','ordinal','meridiem'];

在此示例中,差异并不大,但如果您有 100 个变量,则差异会变得更加显着。

拆分版中分隔符添加的长度为11 + 1 * n,其中n为元素个数,11为.split('|')
对于数组版本,2 + 3 * (n - 1)2 对应 []

这意味着只要你有 6 个元素,.split 版本就会更短:

for(var i = 5; i < 8; i++){
    console.log('Elements:', i, 'split:', 11 + (i-1), 'array:', 2 + 3 * (i-1));
}
// Elements: 5 split: 15 array: 14
// Elements: 6 split: 16 array: 17
// Elements: 7 split: 17 array: 20

【讨论】:

  • 令人惊讶的是,平均而言,将时间浪费在计算上比下载源代码要好。我的想法正好相反。
  • @Dreen,这样想:考虑到MASSIVE amount of jQuery users,对于更流行的库,每个字节都很重要。 (所以,这更像是服务器端优化,而不是客户端)
  • @Dreen 有点晚了,但基于链接的 jsperf,在我的计算机上,较慢的方法仅慢 0.000005 毫秒。不仅“浪费”可以忽略不计,而且即使是最快的互联网连接也不会在那段时间内下载一个字节的数据,所以总的来说它仍然更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2016-04-01
  • 1970-01-01
  • 2013-09-19
  • 2016-03-22
相关资源
最近更新 更多