===============
- Объекты одинаковой структуры
- Функции одинаковой формы (мономорфные)
- Массивы одинаковых типов
- Желательно проверять крупные алгоритмы или целые блоки
- Одинаковые условия исполнения для каждой итерации теста
- Единица оптимизации - функция, оборачиваем тестируемый код в функцию
- Сохраняем результаты (вводим оптимизатор в заблуждение)
- Прогрев кода перед тестом (дождаться стабилизации)
- Может получиться инлайнинг функций (можно проверить руками)
- Чтоб не инлайнило, например (можно добавить
try {}
) - Принимаем во внимание, что константы подставляются в выражения
- Выражения могут быть предварительно вычислены (не на каждой итерации)
- Вынесение инвариантов цикла (в цикле остается только то, на что влияет цикл)
- Мертвый код (который мог бы быть выброшен оптимизатором)
- Внетренние функции v8
--allow-natives-syntax
- Отключение автоматического gc
--nouse-idle-notification
- Ручной gc
--expose-gc
- Выделение больше памяти
--max_old_space_size=2048