Javascript 在不同浏览器中创建特定大小的空数组时性能较慢
我注意到在MacOSX(10.13.4)系统上使用Chrome(85)、Firefox(79)和Safari(11.1)中的Javascript 在不同浏览器中创建特定大小的空数组时性能较慢,javascript,arrays,Javascript,Arrays,我注意到在MacOSX(10.13.4)系统上使用Chrome(85)、Firefox(79)和Safari(11.1)中的Array(length)创建空阵列的特殊性能统计 这是我的测试脚本 console.time('Array(length)'); var len_int = 1; var test_arr = Array(len_int); console.timeEnd('Array(length)'); console.log('test_arr.length =', test_ar
Array(length)
创建空阵列的特殊性能统计
这是我的测试脚本
console.time('Array(length)');
var len_int = 1;
var test_arr = Array(len_int);
console.timeEnd('Array(length)');
console.log('test_arr.length =', test_arr.length);
我正在尝试从1到100000000[10亿]的各种len_int
。以下是我得到的数据:
CHROME
Array(length) - 1: 0.018310546875 ms
Array(length) - 10: 0.014892578125 ms
Array(length) - 100: 0.01171875 ms
Array(length) - 1000: 0.0068359375 ms
Array(length) - 10000: 0.011962890625 ms
Array(length) - 100000: 0.187744140625 ms
Array(length) - 1000000: 1.826904296875 ms
Array(length) - 10000000: 18.211181640625 ms
Array(length) - 100000000: 0.026123046875 ms
Array(length) - 1000000000: 0.0126953125 ms
FIREFOX
Array(length) - 1: 1ms - timer ended
Array(length) - 10: 1ms - timer ended
Array(length) - 100: 0ms - timer ended
Array(length) - 1000: 0ms - timer ended
Array(length) - 10000: 2ms - timer ended
Array(length) - 100000: 1ms - timer ended
Array(length) - 1000000: 0ms - timer ended
Array(length) - 10000000: 0ms - timer ended
Array(length) - 100000000: 1ms - timer ended
Array(length) - 1000000000: 1ms - timer ended
SAFARI
Array(length) - 1: 0.006ms
Array(length) - 10: 0.028ms
Array(length) - 100: 0.011ms
Array(length) - 1000: 0.009ms
Array(length) - 10000: 0.031ms
Array(length) - 100000: 0.252ms
Array(length) - 1000000: 1.663ms
Array(length) - 10000000: 19.373ms
Array(length) - 100000000: 696.767ms
Array(length) - 1000000000: 0.008ms
奇怪的是,Chrome在1000000[1.8ms]和10000000[18ms]时会破坏亚毫秒的性能,而在更高的阵列中,性能会下降到亚毫秒以下。Safari的性能稍差,从1000000[19ms]到100000000[696ms],然后下降到100000000[0.008ms]。Firefox在性能上似乎相当一致
为什么会出现这种反常现象?在不丧失性能优势的情况下,是否有修复或替代方法来完成相同的任务
我应该指出,我已经多次运行这个基准测试,每次都看到这个异常。我还用Safari(通过BrowserStack)在iPhone7上运行了它,并目睹了同样的异常情况
我这样问是因为我使用
Array(length)
来加速一些利用阵列的脚本,但是对于大小在1000000到10000000之间的阵列,Chrome和Safari的性能提升已经消失了。你不能单次运行微基准,由于其他正在运行的进程和编译器优化,错误太大
至少,您应该让代码运行大量次,并确保实际使用了数组,这样编译器就无法对其进行优化。谢谢。我确实多次运行基准测试。我会在编辑问题时提到这一点。