Объявление функции и разница в производительности выражения функции

Я использовал JSperf для тестирования небольшого образца кода.

введите описание изображения здесь

Согласно нескольким статьям, с которыми я сталкивался, обе должны иметь одинаковую производительность с test2, имеющим небольшое преимущество. Но здесь все наоборот. Может кто-нибудь объяснить, почему огромная разница?

Изменить: я также понимаю разницу между ними обоими. Пожалуйста, не отмечайте это как дубликат этого или других вопросов, которые говорят о семантических различиях и не отвечают на мой вопрос о производительности.

Спасибо.

2 ответа

Решение

Благодаря мощной оптимизации, которую используют движки JavaScript в наши дни, подобные микропроцессоры дают несколько неверные результаты. Например, я предполагаю, что вы пытались измерить накладные расходы при вызове функции. Но похоже на то, как написан ваш код, вы можете (пере) определять определение функции и / или поиск символа один раз за каждые 10 раз, когда вы ее выполняете; Я предполагаю, что это не было целью.

В этом альтернативном тесте я упорядочил вещи, чтобы избежать повторного определения функции, и добавил несколько других способов вызова функций. Это уменьшает разницу в производительности до уровня, который, по моему мнению, преобладает из-за экспериментального шума. Хотя иногда могут быть очевидные различия, но я не буду считать их статистически значимыми, учитывая уровни экспериментальных ошибок. Другими словами, это сводит конкурс к виртуальной ничьей.

Даже в браузерах, где между подходами существует постоянное различие, кэширование функции в локальной переменной, по-видимому, сводит к минимуму разницу между определением и выражением.

Я также понимаю разницу между ними обоими.

Вы также понимаете эти семантические различия?

Обратите внимание, что jsPerf помещает ваш код в узкий цикл, время выполнения которого измеряется. Объявление функции требует создания области видимости блока для каждой итерации, что значительно замедляет тестирование. Это вряд ли то, что вы пытались измерить.

Другие вопросы по тегам