Для цикла VS для каждого в javascript

Какой цикл следует использовать для лучшей оптимизации?

Я пробовал что-то проверить

const arr = new Array(200).fill().map((e, i) => i);
let testArr = [];

function forLoopTest() {
  const t0 = performance.now();

  for (let i = arr.length - 1; i >= 0; i--) {
    testArr.push(arr[i]);
  }

  const t1 = performance.now();
  return (t1 - t0);
}

function forEachTest() {
  const t0 = performance.now();

  arr.forEach(i => testArr.push(i));

  const t1 = performance.now();
  return (t1 - t0);

}


let runTest = 10;
while (runTest > 0) {
  testArr = [];
  console.info(`${forLoopTest()} -- ${forEachTest()}`);
  runTest--;
}

Мои результаты

"0 -- 0",

"0 -- 0",

"0 -- 0",

"0 -- 0.10000000111176632",

"0 -- 0",

"0 -- 0",

"0 -- 0",

"0 -- 0.10000000111176632",

"0 -- 0",

"0 -- 0"

Мои вопросы в том, что это сильно отличается от другого вопроса о stackoverflow

  1. Почему время выполнения для одних и тех же методов разное?
  2. Можно ли предположить, что цикл For лучше, чем предполагалось в выводе?
  3. Это правильные методы для проверки выполнения времени?

насколько я знаю, у цикла лучше производительность

Nazır Dogan 09.01.2019 12:48

Отметьте это stackoverflow.com/questions/43031988/…

Nazır Dogan 09.01.2019 12:49

Пожалуйста, поищите тесты на jsperf.com или создайте свои собственные, они более точны, чем ваш компьютер, делая то и это во время ваших тестов.

Teemu 09.01.2019 12:49

Они очень похожи, я думаю, это просто зависит от того, что вы делаете в цикле. Я обычно использую цикл forEach в JS. Если я изменяю данные, я использую карту, если я уменьшаю массив, я использую фильтр.

user5283119 09.01.2019 12:49

Странный тест. Не совсем сравнимо, потому что ваш цикл for даже не зацикливается на массиве. В любом случае, в настоящее время различия в производительности for, forEach и for of настолько малы, что вам не нужно о них беспокоиться большую часть времени.

Ry- 09.01.2019 12:54

"лучшая оптимизация" здесь почти наверняка преждевременная оптимизация и, следовательно, зло

Liam 09.01.2019 12:54

как ? это зацикливается arr @ Ry-

Ashutosh Jha 09.01.2019 12:55

Вы должны хотя бы сделать то же самое в обоих циклах testArr.push(arr[i]); вместо testArr.push(i);.

Yury Tarabanko 09.01.2019 12:56

@AshutoshJha: Это цикл от arr.length - 1 к 0. Элементы arr никогда не задействованы.

Ry- 09.01.2019 12:56

@Liam Не обязательно в некоторых конкретных случаях, реальная разница в производительности заметна между циклом for и циклом forEach. Когда есть вложенные циклы и массив достаточно большой, можно сэкономить несколько секунд.

Teemu 09.01.2019 12:57

эти несколько секунд полезны только в том случае, если вы решите, что «зацикливание» - это бутылочное горлышко, чего я бы сказал на 99%, что это не так. Это также пахнет оптимизацией ради оптимизации, на которую просто не стоит тратить время. Так что да, в случаях конкретный @Teemu, но я не считаю это одним из таких.

Liam 09.01.2019 12:58

@YuryTarabanko о да опечатка, спасибо исправляю

Ashutosh Jha 09.01.2019 12:59

@Teemu, в последний раз, когда я использовал jsperf (около года назад), я обнаружил, что первый тест всегда выполняется немного медленнее, чем последующие тесты, даже если код идентичен. Я не знаю, улучшилось ли это ...

garryp 09.01.2019 13:09

@AshutoshJha Попробуйте запустить фрагмент несколько раз. Вы получите разные результаты в зависимости от разных причин. Подобные тесты обычно бесполезны. Вам необходимо профилировать реальный код на реальных данных, привязанных к целевому движку js. Хотя цикл for обычно быстрее на большинстве движков, 200 элементов определенно являются преждевременной оптимизацией.

Yury Tarabanko 09.01.2019 13:11
Поведение ключевого слова "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
14
66
0

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