Разное исполнение Javascript на разных скрипках и на самом Chrome - PullRequest
0 голосов
/ 11 декабря 2018

Я очень новичок в Javascript из C #.Сегодня я провел очень простой тест производительности с 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 голосов
/ 11 декабря 2018

Если вы выполните трассировку на вкладке Производительность Chrome при выполнении этого кода, вы увидите, что большая часть времени тратится на пакеты кода es6console.com, а не на вашу функцию.

Я не совсем вникнул в то, что они делают, но, возможно, это связано с тем, что es6console переносит код с помощью Babel.В целом, лучше не полагаться на скрипты при тестировании производительности, поскольку есть несколько способов добавить дополнительные накладные расходы поверх вашего кода.

...