javascript - 我该相信哪个?jsPerf or JSLitmus?
迷茫
迷茫 2017-04-11 11:37:41
[JavaScript讨论组]

使用 jsPerf 和 JSLitmus 对各种各样的循环做了 N 次测试。
定义数组a=["It's","a","loop"]

起初,两个测试器都给出了 For +

for (var i=0;i<a.length;i++){
  a[i]
}

效率最高(五次均是)
???
为什么?

在多次测试后,jsPerf 告诉我
“其实是 For + cache(六次平均)

for (var i=0,len=a.length;i<len;i++){
  a[i]
}

JSLitmus 纠正道:
“不!是 Do While + cache(三次平均)

var i=0,len=a.length
do {
  a[i]
  i++
}
while(i<len)

不解。前后性能为什么会不一样?为何最初不缓存变量直接i<a.length性能更高?
还是测试代码有问题?到底那种循环性能更好?
jsPerf 测试页见这里
谢答。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
巴扎黑

我认为这都支测试只能参考用而已,不是测试代码的问题,例如我的macOS+Chrome v55测你这代码后最快的是For -

不同的浏览器、版本、作业系统都有可能有不同的结果。有可能最快的是另一种,也有可能差异不同。

表面上语法上似乎看起来没缓存,但浏览器的JS引擎有自动(智能)缓存,而且有可能会去糖之后转为最有效执行,各种引擎实作不一,10多%算误差范围内,循环语法都可以视为同等效能,用途可能有些情况差异而已。

循环语句(for/while)与forEach/map相比就有比较大的的性能差异,这两种就是循环语句与调用函数的差异性。例如这个测试的结果。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号