代码之家  ›  专栏  ›  技术社区  ›  Vahid

Javascript在不同提琴和chrome上的不同性能

  •  0
  • Vahid  · 技术社区  · 6 年前

    我对C#的Javascript很陌生。今天我用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 回复  |  直到 6 年前
        1
  •  1
  •   Joru    6 年前

    如果你在 Chrome performance tab 在执行这段代码时,您将看到大部分时间都花在es6console.com的代码包中,而不是您的函数中。

    我没有深入了解他们到底在做什么,但这可能与es6console使用Babel传输代码有关。一般来说,性能测试最好不要依赖于fiddle,因为有几种方法可以在代码的基础上增加额外的开销。