Перейти к содержанию

Производительность frontend-приложений

Требования этого документа применяются к browser-результату frontend-приложений профилей CSR, SSR, SSG и edge по frontend/rendering-profiles.md. Документ фиксирует рекомендуемое измерение и базовую политику. Численные цели Service Level Indicator (SLI) и пороги оповещений определяются владельцем продукта по OPS-SLO-002. Уровни обязательности определены в корневом README.md.

FE-PERF-001. Измерение Core Web Vitals

Уровень: SHOULD

Применяется к: production-приложению

Приложению следует измерять Core Web Vitals (LCP, INP, CLS) и базовые метрики загрузки у реальных пользователей через RUM по FE-OBS-001. Измерение следует вести непрерывно в production, а не только в синтетических тестах. Эти показатели используются как пользовательские SLI для применимых критичных сценариев по OPS-SLO-001.

Численная цель и окно измерения устанавливаются по OPS-SLO-002. Production- выпуску следует иметь численную цель для Core Web Vital, выбранного как SLI критичного пользовательского сценария. Для начальной калибровки допускается временная цель по OPS-SLO-002.

Обоснование

Без измерения реальной производительности невозможно определить деградацию и оценить достижение эксплуатационных целей.

Проверка

  • проверка наличия метрик LCP, INP и CLS в OpenObserve;
  • сопоставление измерения с реальной аудиторией;
  • review представления метрик по выпускам.

Исключения

Проект MAY не собирать RUM без ADR. В изолированном окружении или при выборе другого канала производительность MAY измеряться синтетически с явно зафиксированной периодичностью.

FE-PERF-002. Бюджет размера bundle

Уровень: SHOULD

Применяется к: production-сборке

Проекту следует зафиксировать машинно-читаемый бюджет размера bundle, включая общий размер и размеры точек входа либо маршрутов. Если бюджет используется, CI должен проверять его и завершаться ошибкой при превышении текущего значения. Принятие большего размера должно выполняться явным изменением численного бюджета с указанием измеренного изменения размера и затронутых начальных сценариев.

Начальные значения должны основываться на измеренном артефакте и пересматриваться при изменении SLI производительности.

Обоснование

Бюджет является дешёвым ранним индикатором регрессии, но не измеряет пользовательский результат напрямую и может быть заменён эквивалентным автоматизированным контролем до release.

Проверка

  • автоматическая проверка бюджета в CI;
  • проверка состава bundle по маршрутам;
  • review обоснования изменения бюджета.

Исключения

Бюджет MAY отсутствовать, если до release выполняется другая воспроизводимая автоматизированная проверка, обнаруживающая регрессию объёма или времени загрузки критичного сценария. Причина выбора и связь проверки с SLI по FE-PERF-001 должны быть зафиксированы по правилам корневого README.md.

FE-PERF-003. Стратегия загрузки ресурсов

Уровень: SHOULD

Применяется к: ресурсам production-приложения

Приложению следует загружать в начальном сценарии только необходимые для него ресурсы. При использовании бюджета FE-PERF-002 начальная загрузка должна оставаться в его пределах. Крупный ресурс, не используемый начальным сценарием, следует загружать после него или по требованию.

Code splitting, lazy loading, приоритизация и адаптивная загрузка MAY использоваться как способы достижения этого результата, но ни один из них не обязателен сам по себе.

Обоснование

Ограничение начальной загрузки уменьшает время до интерактивности и объём передаваемых данных без навязывания одинаковой структуры bundle.

Проверка

  • анализ загружаемых ресурсов на основном сценарии;
  • проверка отсутствия неиспользуемого крупного ресурса в начальной загрузке;
  • тест загрузки в представительном браузере из нижней границы матрицы.

Исключения

Ресурс, необходимый основному сценарию, MAY загружаться без отсрочки.

FE-PERF-004. Регрессия производительности в CI

Уровень: SHOULD

Применяется к: CI pipeline проекта

Проекту следует выполнять воспроизводимую синтетическую проверку LCP, INP и CLS для изменения критического пути, стратегии рендеринга или загрузки ресурсов. Запуск для каждого merge request не требуется. При использовании бюджета FE-PERF-002 CI должен продолжать проверять его детерминированно; при выборе эквивалентного контроля он должен выполняться перед release. Статистически нестабильный синтетический результат не должен быть единственной причиной блокировки.

Обоснование

Автоматическая проверка обнаруживает регрессию до поставки, пока SLI ещё не зафиксированы.

Проверка

  • review зафиксированных условий синтетического запуска;
  • сравнение результата до и после существенного изменения;
  • проверка применимого контроля до release по FE-PERF-002.

Исключения

Отклонение допустимо, если изменение не затрагивает критический путь и проходит применимый контроль по FE-PERF-002.