Задать вопрос
@ivandao

Тратит ли функция cb = ( e ) => e ресурсы на вычисления?

В качестве callback'а передаю функцию
const cb = ( e ) => e

Тратит ли такая функция на v8 ресурсы на вычисления?
  • Вопрос задан
  • 206 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
В общем случае да - как минимум на создания контекста вызова, но после оптимизации может и не тратить, identity функция (функция просто возвращающая свой аргумент, как Ваш cb) хорошо инлайнится, тут вопрос в том - инлайнится ли функция, в которую Вы ее передаете.

Для понимания, нужно понимать, что v8 делает с кодом под капотом:
Когда платформа (браузер, node.js) только загрузила исходный код в v8, то выполняет его с помощью интерпретатора Ignition, а заодно анализирует это выполнение. На этом этапе весь код выполняется как есть.
Функции которые вызвались 2-3 раза отправляются в оптимизирующий JIT компилятор TurboFan, который скомпилирует из JS машинный код и сделает множество оптимизаций. В частности он может инлайнить некоторые функции (но не все).
Например, если при анализе кода выяснится, что некая функция f0 постоянно вызывает f1 передавая ей Ваш cb, и при этом f1 чистая функция - то f1 скорее всего заинлайнится в f0, а вызов cb просто заменится на свой аргумент. Но опять же, все зависит от Вашего кода и на сколько он оптимизируемый.

В любом случае identity функция очень легкая
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы