Pau*_*ski 12 javascript arrays performance benchmarking hashtable
我很不明白为什么这个测试:
http://jsperf.com/push-method-vs-setting-via-key
显示出来
a.push(Math.random());
Run Code Online (Sandbox Code Playgroud)
比...慢十倍
a[i] = Math.random();
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么会这样吗?什么魔法"推"使它变得如此之慢?(与其他有效的方法相比,这种方法很慢).
编辑
注意:推送测试是有偏见的.我每次迭代都会增加数组的大小!阅读仔细接受的答案!
Ber*_*rgi 16
你能解释一下为什么会这样吗?
因为你的测试存在缺陷.所述push
不总是追加到现有a
阵列使它大得多,而第二测试并仅使用第一指标1000.使用setup
这里还不够,你必须a
在每个for循环之前重置数组:http://jsperf.com/push-method-vs-setting-via-key/3.
除此之外,方法调用push
可能有一点开销,并且与使用for循环的索引相比,确定当前数组长度可能需要额外的时间.
通常没有理由不使用push
- 该方法完全用于操作,并使一些代码更容易阅读.虽然有些人认为一个版本比另一个版本更快,但两者都在浏览器中同样优化.请参阅为什么array.push有时比array [n] = value更快?并在添加到数组时使用push方法或.length? - 结果差异很大,实际上是无关紧要的.使用更好的理解.
归档时间: |
|
查看次数: |
8849 次 |
最近记录: |