不同的小提琴和Chrome本身对Javascript的不同性能

时间:2018-12-10 23:39:14

标签: javascript performance performance-testing jsfiddle

我对来自C#的Java语言很陌生。今天,我在几个小技巧上用JS做了一个非常基本的性能测试,以了解性能如何与C#相匹配。

令我惊讶的是,以下代码在不同的小提琴上以不同的性能运行!

var start = performance.now();

var iterations = 100000000;

for (var i = 0; i < iterations; i++)
{
  var j = i * i;
}

var end = performance.now();

var time = end - start;
alert('Execution time: ' + time);

https://jsfiddle.net/sfcu2vo6/4/

https://es6console.com/

在大多数网站上,大约需要3秒钟,而在Jsfiddle上,大约需要80毫秒!

秘密是什么?

更新

下一步,我在html文件中编写了相同的代码,并在chrome中亲自执行。

<html>
    <head></head>
    <body>
        <script>

        var start = performance.now();    
        var iterations = 100000000;       
        for (var i = 0; i < iterations; i++)
        {
          var j = i * i;
        }

        var end = performance.now();    
        var time = end - start;
        alert('Execution time: ' + time);

        </script>
    </body>
</html>

这需要3秒钟以上!说真的,为什么JsFiddle更快?

更新2

它变得更加有趣! 我将这个代码另存为我的.htm文件,并在桌面上以不同的名称! 它现在像小提琴一样运行约80毫秒!另一个具有完全相同的代码,大约像其他小提琴一样运行3秒钟!我完全糊涂了!有人可以尝试一下吗?

更新3

好吧!我放心了!快速的原因是将代码包装在window.onload = function() {中。作为一个初学者,我犯了一个非常初学者的错误!

1 个答案:

答案 0 :(得分:1)

如果在执行此代码时在Chrome performance tab中进行跟踪,您会发现花费的大部分时间都在es6console.com的代码束中,而不是函数中。

我没有深入研究他们在做什么,但这可能与es6console使用Babel转换代码这一事实有关。通常,最好不要依赖小提琴来进行性能测试,因为有多种方法可以在代码之上增加额外的开销。