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

前端之家收集整理的这篇文章主要介绍了javascript – 为什么此代码在不同的值上表现不同前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这段代码
  1. var i = 10000000000;
  2. do {
  3. i--;
  4. }
  5. while (i !== 0);
  6. //Result: 38 second.
  7.  
  8. var i = 10000000000;
  9. do {}
  10. while (i-- !== 0);
  11. //Result: 27 second.
  12. //(same result with while (i--)
  13.  
  14. var i = 10000000000;
  15. do {}
  16. while (i-- | 0);
  17. //Result: 13.5 second.

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

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

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

解决方法

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

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

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

猜你在找的JavaScript相关文章