javascript – 为什么此代码在不同的值上表现不同

前端之家收集整理的这篇文章主要介绍了javascript – 为什么此代码在不同的值上表现不同前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这段代码
var i = 10000000000;
do {
    i--;
}
while (i !== 0);
//Result: 38 second.

var i = 10000000000;
do {}
while (i-- !== 0);
//Result: 27 second.
//(same result with while (i--)

var i = 10000000000;
do {}
while (i-- | 0);
//Result: 13.5 second.

问题是:为什么这些版本会同时获得较小的i值?如果我从i中减去一个零;所有版本都需要2.2秒. (甚至在JIT优化后测试 – 仅在V8中测试)

似乎合乎逻辑的是,第三个版本应该总是更快,但只有非常高的值才会更快.

这只是一种好奇心……实际上并不重要.

解决方法

处理器,操作系统和解释器可能以难以预测的方式干扰您的编程速度.这就是为什么大哦符号用于评估算法.

这里速度可能不同的原因之一是,如果只有一个零,则i的值只能用32位表示.因此,解释器生成的汇编代码可以执行优化并使用32位整数的指令.

此外,最后一个代码中的i的值被转换为32位整数,从而改变了迭代次数,这就是为什么当i的值不能仅使用32位表示时它执行得更快的原因.

猜你在找的JavaScript相关文章