Улучшает ли добавление фигурных скобок функцию стрелки? - PullRequest
0 голосов
/ 10 июня 2019

Я говорю о случае, когда вам не нужно ничего возвращать.

Например:

let pos = {'x': 1, 'y': 1};
['x', 'y'].forEach((val) => pos[val] = 2);

Мне любопытно, влияет ли это неявное возвращение на производительностьforEach?

Если мы добавим фигурные скобки (чтобы функция перестала возвращать результат выражения), это повлияет на производительность?

Ответы [ 2 ]

4 голосов
/ 10 июня 2019

Это не будет иметь значения, которое вы можете обнаружить, даже в очень, очень большом массиве.Но если вам интересно, вы всегда можете профилировать его на тех движках JavaScript, которые вас интересуют, и использовать ваш реальный код (поскольку синтетический код дает синтетические результаты).

В терминах спецификации, оценка функционального кода, который завершаетсяreturn (включая неявный возврат стрелки) вместо простого «падения» конца кода приводит к двум различным видам завершения, а затем процесс вызова этой функции различает возврат и невозврат и поставки undefined в случае невозврата.Код forEach, конечно, не использует результат, но теоретически в движке JavaScript могут быть разные пути к коду, поэтому теоретически они могут иметь немного другую производительность.

На практике,Тем не менее, я думаю, что вы можете смело предположить, что движки JavaScript оптимизируют это довольно хорошо, и разница не очевидна.

В общем, не оптимизируйте заранее.Реагируйте на проблему производительности в данном бите кода, когда у вас есть проблемы с производительностью в данном бите кода.(Тем не менее, я полностью понимаю, что заинтересован в подобных вещах абстрактно ...)

Просто ради забавы я сделал jsPerf , неувидеть какую-либо существенную разницу в этом синтетическом тесте на Chrome (V8) или Firefox (SpiderMonkey):

enter image description here

Но опять же , синтетическийтесты дают синтетические результаты.

2 голосов
/ 10 июня 2019

Как и в большинстве вопросов о производительности, правильный ответ - это измерить его.

Как можно видеть на jsPerf , различия неизмеримо незначительны и будут определенно перевешиваться другими вещами, такими как накладные расходы от forEach и т. Д.

В действительности, конечно, любая разница в этой шкале незаметна.

Sample performance measurement result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...