Различная производительность Javascript на разных рабочий примерх и самом Chrome

Я очень новичок в 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() {. Будучи абсолютным новичком, я совершил ошибку очень новичка!

Заметьте, что такой микробенчмарк в любом случае обречен. Хороший оптимизирующий компилятор полностью отбросит цикл без операции.

Bergi 11.12.2018 08:19

@Bergi Хорошо! Это печальные новости! :( Вы имеете в виду, что на самом деле производительность - это та, которую показывают другие скрипки, верно? JsFiddle игнорирует часть var j = i * i, и поэтому она быстрее?

Vahid 11.12.2018 08:22

@Bergi Я снова обновил свой ответ! Очень смущенный.

Vahid 11.12.2018 08:28

Нет, я не знаю, почему это работает по-другому. Предполагая, что среда такая же (как и для ваших двух html-файлов), оптимизатор должен влиять на оба в одинаковой степени.

Bergi 11.12.2018 08:34

@Bergi Я совершил глупую ошибку! Второй был внутри window.onload = function() {, поэтому он и работает быстрее! Я думаю, что JsFiddle тоже делает что-то подобное, а другие консоли этого не делают!

Vahid 11.12.2018 08:36

Да, возможно, оптимизатор не запускает код, который выполняется сразу при запуске. Однако это не объясняет "Я сохранил как мой файл .htm с этим кодом внутри под другим именем [и теперь он работает по-другому".

Bergi 11.12.2018 08:40

@Bergi Кажется, я немного изменил его, добавив этот window.onload, и забыл его! Прости!

Vahid 11.12.2018 08:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
60
1

Ответы 1

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

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

Спасибо, Joru, ближе к истине этот mes JsFiddle?

Vahid 11.12.2018 07:59

Я верю в это, но для проверки истинного времени выполнения вы всегда можете создать пустую html-страницу, на которой будет только ваш код и ничего больше.

Joru 12.12.2018 18:49

На самом деле производительность лучше, когда код запускается внутри window.onload = function() {. Некоторые из этих скрипок это делают, а некоторые нет. Это было причиной плохой работы.

Vahid 12.12.2018 19:00

Это может обойти некоторые накладные расходы, которые они вносят в некоторых случаях, но это не тот случай, когда код всегда будет работать быстрее в функции загрузки.

Joru 12.12.2018 19:45

Другие вопросы по теме