https://github.com/howprogrammingworks/benchmark
Performance testing for different techniques
https://github.com/howprogrammingworks/benchmark
benchmark benchmarking code compare javascript js node nodejs optimization programming speed
Last synced: about 2 months ago
JSON representation
Performance testing for different techniques
- Host: GitHub
- URL: https://github.com/howprogrammingworks/benchmark
- Owner: HowProgrammingWorks
- License: mit
- Created: 2016-12-06T10:18:57.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-09-04T18:18:24.000Z (over 1 year ago)
- Last Synced: 2023-09-05T06:17:34.854Z (over 1 year ago)
- Topics: benchmark, benchmarking, code, compare, javascript, js, node, nodejs, optimization, programming, speed
- Language: JavaScript
- Homepage: https://www.youtube.com/TimurShemsedinov
- Size: 65.4 KB
- Stars: 17
- Watchers: 21
- Forks: 13
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Измерение производительности кода и оптимизация
===============[](https://www.youtube.com/watch?v=sanq2X7Re8o)
## Оптимизация
- Объекты одинаковой структуры
- Функции одинаковой формы (мономорфные)
- Массивы одинаковых типов## Замер скорости
- Желательно проверять крупные алгоритмы или целые блоки
- Одинаковые условия исполнения для каждой итерации теста
- Единица оптимизации - функция, оборачиваем тестируемый код в функцию
- Сохраняем результаты (вводим оптимизатор в заблуждение)
- Прогрев кода перед тестом (дождаться стабилизации)
- Может получиться инлайнинг функций (можно проверить руками)
- Чтоб не инлайнило, например (можно добавить `try {}`)
- Принимаем во внимание, что константы подставляются в выражения
- Выражения могут быть предварительно вычислены (не на каждой итерации)
- Вынесение инвариантов цикла (в цикле остается только то, на что влияет цикл)
- Мертвый код (который мог бы быть выброшен оптимизатором)
- Внетренние функции v8 `--allow-natives-syntax`
- Отключение автоматического gc `--nouse-idle-notification`
- Ручной gc `--expose-gc`
- Выделение больше памяти `--max_old_space_size=2048`