这里的测试:http://jsperf.com/forloopspeed为什么Firefox中的for(var i = 100; i--; {{}}比(var i = 100; i - > 0;){}慢得多(70%)?
正如你所看到的,所不同的是巨大的Firefox,目前在Safari中一个较小的程度上,并没有在Chrome和Opera。
中类似的事情发生的,而环太:http://jsperf.com/whileloopspeed
这里的测试:http://jsperf.com/forloopspeed为什么Firefox中的for(var i = 100; i--; {{}}比(var i = 100; i - > 0;){}慢得多(70%)?
正如你所看到的,所不同的是巨大的Firefox,目前在Safari中一个较小的程度上,并没有在Chrome和Opera。
中类似的事情发生的,而环太:http://jsperf.com/whileloopspeed
我的猜测是,检查i
(数字)是否是falsy值比检查true
/false
(比较的结果)计算更昂贵。
我想在表达结果上执行的内部ToBoolean()
与给出boolean
时相比,在给出number
时稍慢。
In this test当使用!!
从布尔值转换为布尔值时,性能会有差异。
您的测试很有趣,但差异很小,并且在浏览器中看起来很相似,所以我不确定它如何解释为什么Firefox在我的初始测试方面与其他浏览器的行为表现如此不同。 – zjmiller
@zjmiller:我的回答当然是猜测。我不认为你会在这里得到太多的人与知识的执行提供一个确切的原因。但是谁知道?我认为使用Mozilla提交错误报告将为解决您的好奇心留下更大的潜力。 – user113716
这看起来像Jaegermonkey特有的问题。如果我在Tracemonkey下运行测试,效果会消失。
你确定你需要知道为什么吗?你可以将你的发现提交给firefox bugtracker,并在推出时享受修复... – Szocske
够公平的。只是好奇我猜。 – zjmiller
没有真正相关,但最近我遇到了另一个奇怪的问题:http://jsperf.com/array-vs-object-jamie/3为什么Firefox通过索引访问数组元素比Chrome要快五倍? –