Канал про современный фронтенд и базу программирования.
Автор Андрей Кобец, ведущий разработчик с 20-летним опытом разработки.
Рекламу не размещаю.
По вопросам сотрудничества @kobezzza
Post #1253
705
> часто ttfб упирается не в бандл и не в ssr, а в один медленный запрос к бд на первом рендере. пока его не найдёшь, любые оптимизации фронта мимо кассы
Очень справедливое замечание. Действительно, частая проблема любого BFF — это не столько его собственные проблемы, сколько то, как организована работа с данными.
Но тут тоже есть нюансы.
Во-первых, мы живём в эпоху микросервисов. А значит, среднестатистический BFF может делать не один и не два запроса за данными, а десятки. Очень важно, чтобы запросы не только стартовали настолько рано, насколько это возможно, и не только чтобы были организованы рациональные слои кэширования. Важно ещё и то, насколько они конкурентны. Если запросы обрабатываются быстро, но выстраиваются в один критический путь, — это всё равно может тормозить.
Во-вторых, мы должны понимать, что действительно важно для первой отрисовки, а что можно достримить. Вынесение в стриминг может ускорить время до первого байта и время первой отрисовки. Но тут важно не увлечься и не уронить другие метрики, например, тот же CLS.
Но как понять, что и как загружается и тормозит?
А тут нужно смотреть трассы (trace). Сначала завернуть все запросы в специальный фреймворк, а потом смотреть мониторинги и уже на этих данных строить выводы: что тормозит, а что нет. Иначе можно попасть в интересную ситуацию: оптимизировал запрос к БД, а он не самый долгий и выполняется конкурентно с другими — значит, эффект от такой оптимизации заметить куда сложнее.
Сейчас стандартом для такой трассировки стал OpenTelemetry — открытый стандарт и набор инструментов для сбора трейсов, метрик и логов.
Дальше эти трейсы нужно куда-то собирать и смотреть. Тут есть несколько популярных вариантов. Например, Jaeger — один из самых известных инструментов для распределённой трассировки.
Как это работает на практике. Вы инструментируете свой BFF через OpenTelemetry. Каждый входящий запрос получает trace ID. Все downstream-вызовы — к БД, к другим сервисам, к внешним API — становятся спанами внутри этого трейса. Каждый спан показывает: когда начался, сколько длился, что делал, с каким результатом завершился.
Потом вы открываете Jaeger и видите диаграмму, где наглядно показано, какие вызовы шли параллельно, какие последовательно, и какой из них съел больше всего времени. Именно там становится видно: «Ага, вот этот запрос к БД на 800 мс — он и есть узкое место». Или наоборот: «Этот запрос долгий, но он выполняется параллельно с другими, так что не он определяет TTFB».
И вот тут важно понимать: трассировка — это не просто мониторинг, это инструмент для принятия решений. Без неё вы оптимизируете почти вслепую.
📚Если хотите копнуть глубже в Web performance, то уже завтра стартует наш новый трехдневный интенсив.
ПРОКАЧАТЬ WEB PERFORMANCE
💿Запись - 1 год.
🎓Ваш преподаватель - Дима Холстинин (автор наших курсов по Сборке и Инфраструктуре, ведущий разработчик в core команде Т-банк)
- 👍 4
- ❤ 1

