Действуй как performance lead. Сайт: {{site_type}}. Типы страниц: {{page_types}}. Стек: {{framework}}. CI: {{ci}}.
Цель — performance budget, который НЕ метафора, а конкретные числа, проверяемые автоматически на каждом PR. Бюджет, который никто не нарушает по случайности.
Шаг 1 — Базовые принципы бюджета
- По типу страницы, не по сайту. Home может быть тяжелее, dashboard — лёгкая, docs — критично быстрая.
- Mobile-first: бюджет рассчитываем на 4G / Moto G4-class устройство.
- 3 уровня: target (ideal), threshold (PR fail), poison (red alert in production).
- Привязка к бизнесу: каждый параметр объясняется через конверсию / engagement.
Шаг 2 — Метрики и пороги
Для каждого типа страницы:
Веб-витал
| Метрика | Target | Threshold (PR fail) | Poison (alert) |
|---|---|---|---|
| LCP | ≤ 2.0s | ≤ 2.5s | > 4.0s |
| INP | ≤ 100ms | ≤ 200ms | > 500ms |
| CLS | ≤ 0.05 | ≤ 0.10 | > 0.25 |
| TTFB | ≤ 400ms | ≤ 600ms | > 1500ms |
| FCP | ≤ 1.2s | ≤ 1.8s | > 3.0s |
Ресурсы (per page type)
home / marketing:
total transfer: ≤ 800 KB (target) / ≤ 1.2 MB (threshold)
JS: ≤ 150 KB / ≤ 250 KB (compressed)
CSS: ≤ 50 KB / ≤ 80 KB
images: ≤ 400 KB / ≤ 600 KB (above-the-fold only)
fonts: ≤ 80 KB / ≤ 120 KB
requests: ≤ 40 / ≤ 60
dashboard / app:
total: ≤ 600 KB / ≤ 900 KB
JS: ≤ 200 KB / ≤ 350 KB
CSS: ≤ 60 KB / ≤ 100 KB
images: ≤ 200 KB / ≤ 300 KB
fonts: ≤ 60 KB / ≤ 100 KB
e-commerce listing:
total: ≤ 1 MB / ≤ 1.5 MB
JS: ≤ 180 KB / ≤ 280 KB
images: ≤ 600 KB / ≤ 1 MB (with lazy)
article / docs:
total: ≤ 400 KB / ≤ 600 KB
JS: ≤ 80 KB / ≤ 150 KB
CSS: ≤ 40 KB / ≤ 60 KB
checkout:
total: ≤ 500 KB / ≤ 800 KB
JS: ≤ 150 KB / ≤ 250 KB
no third-party (only payment provider)
Шаг 3 — Enforcement в CI ({{ci}})
Lighthouse CI на каждый PR
name: lighthouse-ci
on: [pull_request]
jobs:
lhci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build
- run: npm install -g @lhci/cli@latest
- run: lhci autorun
env:
LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
lighthouserc.json
{
"ci": {
"collect": {
"url": [
"https://staging.example.com/",
"https://staging.example.com/pricing",
"https://staging.example.com/dashboard"
],
"numberOfRuns": 3,
"settings": { "preset": "desktop" }
},
"assert": {
"assertions": {
"categories:performance": ["error", { "minScore": 0.9 }],
"first-contentful-paint": ["error", { "maxNumericValue": 1800 }],
"largest-contentful-paint": ["error", { "maxNumericValue": 2500 }],
"interactive": ["error", { "maxNumericValue": 3500 }],
"cumulative-layout-shift": ["error", { "maxNumericValue": 0.1 }],
"total-byte-weight": ["warn", { "maxNumericValue": 1200000 }],
"resource-summary:script:size": ["error", { "maxNumericValue": 250000 }]
}
}
}
}
Bundle size check (size-limit)
{
"size-limit": [
{ "path": ".next/static/chunks/main-*.js", "limit": "120 KB" },
{ "path": ".next/static/chunks/pages/_app-*.js", "limit": "80 KB" },
{ "path": ".next/static/chunks/pages/dashboard-*.js", "limit": "200 KB" }
]
}
PR-комментарий с diff: «main-bundle +12 KB (115 → 127, limit 120 — FAIL)».
Шаг 4 — Production monitoring (Real User Monitoring)
- Сбор Web Vitals в продакшене через web-vitals npm package
- Слать в analytics (Vercel Analytics / Cloudflare Web Analytics / custom)
- Alert на slack если p75 LCP > 3s в течение часа
Шаг 5 — Когда нарушать бюджет (escalation)
- PR-автор просит исключение → требует обоснования и срока на возврат в бюджет
- Tech lead апрувит / отклоняет
- Если апрувлено — заводится тикет с deadline (обычно 2 недели)
- После deadline — автоматический revert или blocked deploys
Шаг 6 — Документация
Файл PERFORMANCE_BUDGET.md в репозитории:
- Текущие лимиты
- Как локально проверить (
npm run lhci) - Что делать если PR упал
- История исключений
Anti-patterns
- ❌ Один бюджет на весь сайт — home и dashboard одинаково? нет
- ❌ Бюджет в Notion без enforcement — мёртвый документ
- ❌ Lighthouse только на десктопе — реальные пользователи на телефонах
- ❌ Только синтетика без RUM — лабораторные числа != реальность
- ❌ Хард-фейл без процесса исключений — команда отключает CI
- ❌ Бюджет без объяснения «почему 250KB» — спор каждый PR
- ❌ Полагаться только на Lighthouse score — он скрывает детали
- ❌ Не учитывать third-party скрипты в бюджете — analytics жрёт 300KB
Похожие промты
site / auditFeatured
Полный UX-аудит сайта
Эвристическая оценка по Нильсену + проверка ключевых сценариев. На выходе — приоритизированный список проблем.
uxauditheuristics
Открыть
Средний15-30 мин
site / auditFeatured
Аудит производительности (Core Web Vitals)
Глубокая проверка LCP, INP, CLS с привязкой к коду и приоритизированным планом исправлений.
performancecore web vitalslighthouse
Открыть
Продвинутый30-60 мин
site / auditFeatured
Аудит доступности по WCAG 2.2 AA
Проверка контраста, клавиатурной навигации, скринридеров, фокус-индикаторов и ARIA.
a11ywcagaccessibility
Открыть
Средний30-60 мин