Как фронтенд-разработчик, обход цикла for и foreach используется почти каждый день, так какой из этих двух методов обхода более эффективен? В чем причина высокой эффективности?
1. цикл for( )
Благодаря подписке код в цикле многократно выполняется, что является мощным и может получать элементы через index. Это удобнее при работе с более сложной обработкой.
2. Цикл forEach()
Метод forEach() используется для вызова каждого элемента массива, передавая элемент функции обратного вызова. Некоторые foreach также называются расширенными циклами for, foreach на самом деле является специальной упрощенной версией цикла for. Обратите внимание, что forEach() не будет выполнять функцию обратного вызова для пустого массива.
array.forEach(function(currentValue, index, arr), thisValue)
функция (текущее значение, индекс, обр):Необходимый. Функция, которую нужно вызывать для каждого элемента массива.
currentValue обязательный, текущий элемент
index
Необязательно, значение индекса текущего элемента.
arr Необязательный объект массива, которому принадлежит текущий элемент.
это значение:Необязательный. Значение, передаваемое функции, обычно использует значение this. Если этот параметр пуст, «неопределенное» будет передано «этому».
стоимость
Три, использование console.time и console.timeEnd
console.timeа такжеconsole.timeEndЭти два метода можно использовать, чтобы позволить веб-разработчикам измерять время, затрачиваемое на выполнение скрипта javascript. Поскольку веб-приложения становятся все более и более важными, а производительность выполнения JavaScript становится все более ценной, веб-разработчики понимают, что необходима машина для тестирования производительности. Есть много способов проверить производительность JavaScript, ноconsole.time/console.timeEndЭти два метода являются самыми основными и прямыми техниками.
- console.timeСпособ состоит в том, чтобы начать считать время
- console.timeEndЭто стоп-часы, вывод времени выполнения скрипта.
- Обоим методам можно передать параметр в виде имени таймера, который используется для различения каждого таймера при параллельном выполнении кода.
- правильно
console.timeEndВызов немедленно выведет общее время выполнения в миллисекундах.
// 启动计时器
console.time('计时器名称');
// (写一些测试用代码)
// 停止计时,输出时间
console.timeEnd('计时器名称');
4. Тест производительности
На уровне 1000000 forEach работает лучше, чем для
let arrs = new Array(1000000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {};
console.timeEnd('for'); // for: 10.329833984375ms
console.time('forEach');
arrs.forEach((arr) => {});
console.timeEnd('forEach'); // forEach: 5.076904296875ms
На уровне 10000000 производительность forEach все равно выше, чем у forEach
let arrs = new Array(10000000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {};
console.timeEnd('for'); // for: 95.157958984375ms
console.time('forEach');
arrs.forEach((arr) => {});
console.timeEnd('forEach'); // forEach: 37.9619140625ms
На порядках выше 100 000 000 производительность forEach намного ниже, чем у for.
let arrs = new Array(100000000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {};
console.timeEnd('for'); // for: 939.18994140625ms
console.time('forEach');
arrs.forEach((arr) => {});
console.timeEnd('forEach'); // forEach: 1614.8642578125ms
Пять, разница между for и forEach
[3.1] Обход
для прохождения цикла по порядку, forEach проходит с помощью итератора iterator
[3.2] Структура данных
Цикл for предназначен для случайного доступа к элементам, foreach — для доступа к элементам в последовательном связанном списке.
【3.3】Производительность
Для arraylist это последовательный список, к которому можно обращаться последовательно, используя цикл for, который быстрее; использование foreach будет немного медленнее, чем цикл for.
Для связанного списка это односвязный список, использующий цикл for для чтения следующего поля из первого элемента каждый раз, скорость очень низкая, использование foreach может напрямую читать текущий узел, данные быстрее;
6. Как выбрать
В Foreach меньше кода, чем в цикле for, но foreach использует IEnumerable. Он менее эффективен, чем цикл for во время выполнения. Конечно, при работе с петлями с неопределенным количеством петель, или когда количество петель нужно рассчитать. Удобнее использовать foreach. А код foreach подобен циклу for после оптимизации кода системы компиляции.
Можно сказать, что оператор foreach представляет собой особую упрощенную версию оператора for.С точки зрения обхода массивов и коллекций foreach предоставляет разработчикам большое удобство. При разработке сложных циклов вы все равно должны использовать циклы for, чтобы они были более гибкими.
Статья постоянно обновляется каждую неделю, вы можете искать в WeChat "Особенности интерфейса"Прочтите это в первый раз, ответьте [видео】【книги】 Получите 200 ГБ видеоматериалов и 30 книг в формате PDF.