javascript - 我该相信哪个?jsPerf or JSLitmus?

查看:80
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆