Какой цикл следует использовать для лучшей оптимизации?
Я пробовал что-то проверить
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
Отметьте это stackoverflow.com/questions/43031988/…
Пожалуйста, поищите тесты на jsperf.com или создайте свои собственные, они более точны, чем ваш компьютер, делая то и это во время ваших тестов.
Они очень похожи, я думаю, это просто зависит от того, что вы делаете в цикле. Я обычно использую цикл forEach в JS. Если я изменяю данные, я использую карту, если я уменьшаю массив, я использую фильтр.
Странный тест. Не совсем сравнимо, потому что ваш цикл for даже не зацикливается на массиве. В любом случае, в настоящее время различия в производительности for, forEach и for of настолько малы, что вам не нужно о них беспокоиться большую часть времени.
"лучшая оптимизация" здесь почти наверняка преждевременная оптимизация и, следовательно, зло
как ? это зацикливается arr @ Ry-
Вы должны хотя бы сделать то же самое в обоих циклах testArr.push(arr[i]); вместо testArr.push(i);.
@AshutoshJha: Это цикл от arr.length - 1 к 0. Элементы arr никогда не задействованы.
@Liam Не обязательно в некоторых конкретных случаях, реальная разница в производительности заметна между циклом for и циклом forEach. Когда есть вложенные циклы и массив достаточно большой, можно сэкономить несколько секунд.
эти несколько секунд полезны только в том случае, если вы решите, что «зацикливание» - это бутылочное горлышко, чего я бы сказал на 99%, что это не так. Это также пахнет оптимизацией ради оптимизации, на которую просто не стоит тратить время. Так что да, в случаях конкретный @Teemu, но я не считаю это одним из таких.
@YuryTarabanko о да опечатка, спасибо исправляю
@Teemu, в последний раз, когда я использовал jsperf (около года назад), я обнаружил, что первый тест всегда выполняется немного медленнее, чем последующие тесты, даже если код идентичен. Я не знаю, улучшилось ли это ...
@AshutoshJha Попробуйте запустить фрагмент несколько раз. Вы получите разные результаты в зависимости от разных причин. Подобные тесты обычно бесполезны. Вам необходимо профилировать реальный код на реальных данных, привязанных к целевому движку js. Хотя цикл for обычно быстрее на большинстве движков, 200 элементов определенно являются преждевременной оптимизацией.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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