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

时间:2014-10-14 09:29:26

标签: javascript browser benchmarking

我正在考虑对3个主要浏览器进行基准测试,以了解他们使用相当简单的代码运行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和Chrome上约为30毫秒,而在IE和Chrome上大约需要30毫秒),并且IE和Chrome的运行时间没有同样减少。

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

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

1 个答案:

答案 0 :(得分:2)

它可能与重置调用堆栈和缓存有关。这是关于调用堆栈在javascript中工作方式的interesting talklink给@Yiving的答案@Jiving在评论中给出的问题也非常有用。

如果要测量纯加速时间,则在Web worker中运行它可能是可行的。我将您的脚本移到了它,请参阅this 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) 

防止污染全球范围。