Dskr.dev

English

15 янв. 2020

Редактировать

Производительность серверного рендеринга в 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.337ms0.534ms0.357ms0.357ms
Среднее значение последующих запусков3.172ms0.047ms1.565ms0.378ms
Минимальное значение первого запуска14.423ms0.135ms0.205ms0.205ms
Минимальное значение последующих запуска1.934ms0.037ms0.145ms0.145ms
Максимальное значение первого запуска16.373ms1.009ms0.574ms0.574ms
Максимальное значение последующих запуска5.876ms0.082ms16.826ms0.989ms

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

рендеринг приложенияизвлечение cssсериализация json
1.016.373ms0.787ms0.574ms
1.12.930ms0.047ms7.589ms
1.23.009ms0.054ms0.257ms
1.32.777ms0.040ms0.254ms
1.42.408ms0.037ms3.570ms
1.52.760ms0.042ms0.253ms
2.014.658ms0.540ms0.475ms
2.14.221ms0.064ms0.415ms
2.23.233ms0.082ms0.654ms
2.32.828ms0.045ms0.276ms
2.42.847ms0.042ms3.212ms
2.52.869ms0.050ms0.272ms
3.015.878ms0.135ms0.238ms
3.14.624ms0.052ms0.257ms
3.23.268ms0.055ms0.989ms
3.32.638ms0.041ms0.425ms
3.45.426ms0.040ms0.665ms
3.52.475ms0.050ms0.261ms
4.015.353ms0.198ms0.295ms
4.12.739ms0.048ms16.826ms
4.22.312ms0.044ms0.150ms
4.32.215ms0.038ms0.314ms
4.42.121ms0.040ms0.152ms
4.51.934ms0.037ms0.145ms
5.014.423ms1.009ms0.205ms
5.15.129ms0.069ms0.341ms
5.23.054ms0.041ms0.278ms
5.32.796ms0.040ms0.493ms
5.45.876ms0.046ms0.386ms
5.52.833ms0.039ms0.702ms