// Производительность серверного рендеринга в preact

В предыдущем посте я упоминал про медленный рендеринг preact на стороне ноды. Но после публикации в чатике индивеба усомнились в моих цифрах производительности. И я решил измерить производительность чуть лучше. Я писал про 200-300 мс, но это были цифры которые я увидел во вкладке network в браузере. Как оказалось, далеко не всё это время занимает выполнение моего кода. В данный момент после старта приложения первый http запрос отрабатывает в среднем за 100 мс. Последующие запросы за 50 мс. Это с выключенным кешированием. Проверял на главной странице с двумя постами. Я решил замерить три параметра. Это время рендеринга preact, извлечение css с помощью goober и сериализацию json. С измерением сериализации json возникла некоторая странность. Иногда она выполняется аномально долго, при этом там всегда одинаковые данные. Поэтому в результатах будет два варианта этого показателя, со всеми данными и с отфильтрованными аномальными значениями. Ну и да, сериализация выглядит вот так

const data = JSON.stringify(JSON.stringify(context.data));

Ну и собственно результаты

рендеринг приложения извлечение css сериализация json сериализация json отфлиьтрованая
Среднее значение первого запуска 15.337ms 0.534ms 0.357ms 0.357ms
Среднее значение последующих запусков 3.172ms 0.047ms 1.565ms 0.378ms
Минимальное значение первого запуска 14.423ms 0.135ms 0.205ms 0.205ms
Минимальное значение последующих запуска 1.934ms 0.037ms 0.145ms 0.145ms
Максимальное значение первого запуска 16.373ms 1.009ms 0.574ms 0.574ms
Максимальное значение последующих запуска 5.876ms 0.082ms 16.826ms 0.989ms

Хорошо видна оптимизирующая работа v8, поэтому первый запуск в среднем 5 раз медленнее чем последующие. К сериализации json это отношения не имеет, так как там работает нативный модуль. Ну и видимо никакое кеширование на самом деле не нужно, по крайней мере при таком маленьком приложении, ибо лишние 2-5 мс мало на что влияют. Интересно будет повторить эксперимент когда приложение будет немного побольше.

рендеринг приложения извлечение css сериализация json
1.0 16.373ms 0.787ms 0.574ms
1.1 2.930ms 0.047ms 7.589ms
1.2 3.009ms 0.054ms 0.257ms
1.3 2.777ms 0.040ms 0.254ms
1.4 2.408ms 0.037ms 3.570ms
1.5 2.760ms 0.042ms 0.253ms
2.0 14.658ms 0.540ms 0.475ms
2.1 4.221ms 0.064ms 0.415ms
2.2 3.233ms 0.082ms 0.654ms
2.3 2.828ms 0.045ms 0.276ms
2.4 2.847ms 0.042ms 3.212ms
2.5 2.869ms 0.050ms 0.272ms
3.0 15.878ms 0.135ms 0.238ms
3.1 4.624ms 0.052ms 0.257ms
3.2 3.268ms 0.055ms 0.989ms
3.3 2.638ms 0.041ms 0.425ms
3.4 5.426ms 0.040ms 0.665ms
3.5 2.475ms 0.050ms 0.261ms
4.0 15.353ms 0.198ms 0.295ms
4.1 2.739ms 0.048ms 16.826ms
4.2 2.312ms 0.044ms 0.150ms
4.3 2.215ms 0.038ms 0.314ms
4.4 2.121ms 0.040ms 0.152ms
4.5 1.934ms 0.037ms 0.145ms
5.0 14.423ms 1.009ms 0.205ms
5.1 5.129ms 0.069ms 0.341ms
5.2 3.054ms 0.041ms 0.278ms
5.3 2.796ms 0.040ms 0.493ms
5.4 5.876ms 0.046ms 0.386ms
5.5 2.833ms 0.039ms 0.702ms