DM
Все тесты выше, что демонстрировали люди в очередной раз демонстрирует как люди не понимают какой код они пишут, а точнее что с этим кодом происходит на уровне интерпретатора и компилятора. Они не понимают почему вдруг их for оказался в сто раз быстрее редьюс, при этом мой код с редьюс оказывается быстрее аналогично с for.
Не пишите микробенчмарки на ночь глядя. Научитесь получать байт код от ignition, оптимизированный код от turbofun и его читать. Это несложно и снимает все вопросы в таких тестах. Потому что простите, но вы тестируете не то, что хотите узнать а накладные рахсоды на работу оптимизирующего компилятора.
В моем видео есть пример кода, не просто пример кода, а в том числе его интепретируемая часть и в том числе машинный код. Который наглядно показывает когда как и как собирается код под reduce или под for.
там же пример того же кода, который не просто работает так же как for но работает быстрее. И сделать с тем кодом оптимизируя его for версию ничего нельзя. Он никогда не станет быстрее. В отличии от кода с reduce где применены только базовые оптимизации.
Далее о чистых функциях.
В v8, turbofun работает совершая часто фантастические вещи без какой либо помощи со стороны программиста. Используя для этого только предположения на основании собранной статистики.
Что с одной стороны позволяет легко оптимизировать вещи, которые математически недоказуемы. Но с другой стороны создают н акладные расходы на работу алгоритма деоптимизации неправильно работающего кода.
При этом проблема деоптимизации, зачастую намного более важная чем добиться оптимизированного кода в v8.
Потому использовать аргумент десткать в силу отсуствия инстурментов определения чистой функции, подобные оптимизации проивзодить невозможно - является несостоятельным, продиктованным незнанием того как сейчас работает оптимизирующий компилятор.
Но даже если вынести эти прохладные истории за скобки, и спросить себя, а могу ли я сейчас за пять минут, на колнеке состряпать код который будет оптимизировать вот это
arr.reduce( (p,e) => p+e);то простите это сделает даже начинающий программист без какиз либо доказательств и знаний лямбда исчислений.
Или Вам сложно понять по этому коду что тут нет необходимости в созданиии кложур? что тут весь код можно заинлайнить? Вам это сложно сделать? Вам сложно тут сделать вывод о чистоте этой функции?
Такие задачки решают детки 10 лет на кружке программирования.
Еще раз подчеркиваю.
Цель того что я говорю не дескредитировать чью либо компетенцию, но наглядно показать, как большая часть программистов не знают JavaScript и при этом успешно на нем программируют.
И в этом гениальность архитектуры этого языка, созданного тремя выдающимися специалистами, а не одним как многие думают.
И потому, я всегда призываю - любой кто влез на трибуну дал всем право обьяснить ему почему он клизма которой место в одном месте.
И вто тогда, когда каждый начнет это делать, количество видео с ахинеей о JavaScript на youtube с 99.9% упадет до вменяемого числа.
Кому же интересны детальные обьяснения с примерами кода почему вот этот for обгоняет вот этот reduce пшите в личку. Я не обещаю что отвечу сразу но отвечу обязательно.