功能会随着时间的推移而加速



我正在研究对三种主要浏览器进行基准测试,了解它们使用一段相当琐碎的代码运行JavaScript的速度。我的JS是:

<!DOCTYPE html>
<html>
<body>
  <h1>JS Test page</h1>
  <p>The button below will test the speeed of your browser</p>
  <button onClick="testBrowser()">Test browser</button>
  <p id="TimeArrayP"></p>
  <script>
    function testBrowser() {
      var timeArray = new Array();
      for (i = 0; i < 100; ++i) {
        var start = new Date().getTime();
        var number1;
        var number2;
        var number3;
        var number4;
        var result1;
        var result2;
        var result3;
        var endresult;
        for (e = 0; e < 50000; ++e) {
          number1 = Math.floor((Math.random() * 100) + 1);
          number2 = Math.floor((Math.random() * 100) + 7);
          result1 = ((number1 + number2 / number1 * number2) * (number3 + number2) / number1);
          result2 = ((number2 + number3 / number1 * number4) * (number3 + number1) / number4);
          result3 = ((number3 + number4 / number4 * number2) * (number2 + number3) / number2);
          endresult = ((result1 * result2 * result3) / (result1 + result2 * result3) + result1 / result2);
        }
        var end = new Date().getTime();
        var time = end - start;
        timeArray[i] = time;
      }
      timeArray.toString();
      document.getElementById("TimeArrayP").innerHTML = timeArray;
    }
  </script>
</body>
</html>

在Chrome和IE上,运行时间的开始时间比结束时间高,每次运行超过第二次都是相当一致的时间,并且低于第一次。

然而,Firefox运行此代码的时间要长得多(在Firefox上大约需要180毫秒,而在IE和Chrome上大约需要30毫秒),并且运行时间没有像IE和Chrome那样减少。

对于Firefox漫长的运行时间,以及迭代IE和Chrome所需时间的减少,有什么解释?

我使用的是IE9、Firefox 32.0.1和Chrome 37.0.2062.120。

这可能与重置调用堆栈和缓存有关。下面是一个关于javascript中调用堆栈工作方式的有趣讨论。Jiving在你的问题评论中给出的SO答案的链接也非常有用。

如果你想测量纯计算时间,在网络工作者中运行它可能是可行的。我已经将您的脚本移到它上面了,请参阅jsFiddle

此外,更换

for (i = 0; i < 100; ++i) // and
for (e = 0; e < 50000; ++e)

进入

for (var i = 0; i < 100; ++i) //and 
for (var e = 0; e < 50000; ++e) 

以防止污染全球范围。

相关内容

  • 没有找到相关文章

最新更新