tgoop.com/super_oleg_dev/164
Last Update:
Про deferred экшены и стриминг, которые анонсировал для трамвая тут - https://www.tgoop.com/super_oleg_dev/136
После нескольких неудачных релизов на прод на одном из приложений Тинькофф Путешествия, продолжаем активно дорабатывать фичу, собрал несколько интересных моментов, о которых хочется рассказать.
Фичу очень хочется в прод - радикально улучшает метрики производительности - и общую LCP, и кастомную в приложении, которая как раз показывает как скоро нужный блок был показан в приложении, примерно на полторы секунды на 50м перцентиле.
В самом начале мы столкнулись ещё на тестовом стенде с проблемой буферизации.
Весь смысл стриминга HTML - отдать как можно раньше первый байт ответа на клиент, и все статичные элементы разметки.
При этом по дефолту, балансеры, в нашем случае Nginx - буферизуют ответ от апстрима, что бы не держать слишком много долгих открытых соединений, что полезно в большинстве случаев, но не для стриминга, где это напрямую ухудшает TTFB.
Отключить можно на балансере:
proxy_request_buffering off;
Или через HTTP заголовок в ответе на запрос за страницей:
X-Accel-Buffering: no
Также важно, что бы тайм-аут ответа от апстрима на балансере был выше, чем ваш максимальный тайм-аут на стриминг в приложении - иначе пользователь просто не получит кусок разметки.
В доке Next.js или Marko.js можно найти полезную информацию по теме:
- https://markojs.com/docs/troubleshooting-streaming/
- https://nextjs.org/docs/app/building-your-application/deploying#streaming-and-suspense
BY SuperOleg dev notes
Share with your friend now:
tgoop.com/super_oleg_dev/164