javascript - 我该相信哪个?jsPerf or JSLitmus?
本文介绍了javascript - 我该相信哪个?jsPerf or JSLitmus?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
使用 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 测试页见这里
谢答。
解决方案
我认为这都支测试只能参考用而已,不是测试代码的问题,例如我的macOS+Chrome v55测你这代码后最快的是For -
。
不同的浏览器、版本、作业系统都有可能有不同的结果。有可能最快的是另一种,也有可能差异不同。
表面上语法上似乎看起来没缓存,但浏览器的JS引擎有自动(智能)缓存,而且有可能会去糖之后转为最有效执行,各种引擎实作不一,10多%算误差范围内,循环语法都可以视为同等效能,用途可能有些情况差异而已。
循环语句(for/while)与forEach/map相比就有比较大的的性能差异,这两种就是循环语句与调用函数的差异性。例如这个测试的结果。
这篇关于javascript - 我该相信哪个?jsPerf or JSLitmus?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文