Рассмотрим на примере движка JavaScript. Когда вы используете
arr.map(callback), для каждого элемента массива необходимо:1. Создать контекст для вызова функции
callback.2. Передать в неё аргументы (
element, index, array).3. Вызвать эту функцию.
4. Получить возвращённое значение.
5. Записать это значение в новый массив.
В классическом цикле
for вы просто напрямую обращаетесь к элементу массива по индексу (arr[i]) и выполняете операцию. Никаких дополнительных вызовов функций, создания контекстов и промежуточных массивов не происходит. Кроме того, map создаёт новый массив, что требует дополнительной памяти и времени на аллокацию. Цикл for может писать результат сразу в заранее подготовленный массив или вообще не создавать его, если это не нужно.🖥 Разница в производительности может быть очень существенной. Вот несколько наглядных примеров из реальных тестов:
▪️ В одном из бенчмарков на Node.js
map и reduce оказались в сотни раз медленнее обычного for. Время выполнения для map составило ~11 000 мс против ~35 мс у for.▪️ В другом тесте
Array.map выполнял всего 44.74 операции в секунду, в то время как простой цикл for с инициализацией массива — 150 операций в секунду. Это означает, что map был более чем в 3 раза медленнее.▪️ В тестах, где
map используется как альтернатива for...of, отмечается, что код с итераторами и функциями, вызываемыми в цикле (включая map, filter, reduce), может быть примерно в 10 раз медленнее, чем прямой цикл for.Есть интересный нюанс. В некоторых движках (например, Safari/WebKit)
map может оказаться даже быстрее, чем for...of с итератором, потому что итераторы тоже создают дополнительные накладные расходы на вызов метода .next(). Однако классический for с индексом всё равно остаётся быстрее всех.Всё это становится важным, когда вы работаете с очень большими массивами (десятки или сотни тысяч элементов) в критичном для производительности коде — например, в играх, при обработке видео, научных расчётах или в высоконагруженных серверных приложениях.
В 95% обычных задач (обработка данных из формы, небольшие списки в UI). Разница в пару миллисекунд не заметна пользователю, и читаемость кода
map (декларативный стиль, отсутствие ручного управления счётчиком) часто важнее микрооптимизации. #программирование #алгоритмы #структуры_данных #IT #рефакторинг #оптимизация #javascript 🍩 Для донатов на кофе ☕️: +79616572047 (СБП / ВТБ / OZON) 📚 Искусство программирования / The Art of Computer Programming
📗 Методы и алгоритмы решения задач оптимизации [1983] Бейко, Бублик
📚 Подборка полезных книг по Computer Science и для тех, кто изучает IT образование [30 книг]
📚 Подборка из 30 книг по программированию на JavaScript
📚 Подборка по WEB программированию (38 книг)
💡 Physics.Math.Code // @physics_lib
