Налаштування Performance Budget для сайту
Уявіть: після чергового релізу LCP виріс з 2.1 до 3.8 секунд, а конверсія впала на 12%. Без Performance Budget ви дізнаєтеся про це через тиждень зі звіту PageSpeed Insights. Performance Budget — це автоматичний шлагбаум у CI/CD: збірка падає, якщо бюджет перевищено. Ми налаштовуємо такий шлагбаум за 2–3 дні. Наші інженери сертифіковані Google і мають 5+ років досвіду в оптимізації Core Web Vitals.
Performance Budget — це не просто набір метрик, а культура контролю якості кожного релізу. Він запобігає деградації, яку не помічають ручні перевірки. Наприклад, один наш клієнт виявив, що додавання нового віджета збільшило CLS на 0.15 — бюджет зловив це на стадії PR, і реліз не пішов у продакшн. За даними Google, компанії, які впровадили бюджет продуктивності, скоротили час завантаження на 40%, що призвело до додаткового доходу в середньому $200 000 на рік. Google Web Vital Report.
Ключові метрики та орієнтири
| Метрика | Добре | Потребує роботи | Погано |
|---|---|---|---|
| LCP (Largest Contentful Paint) | < 2.5s | 2.5–4s | > 4s |
| INP (Interaction to Next Paint) | < 200ms | 200–500ms | > 500ms |
| CLS (Cumulative Layout Shift) | < 0.1 | 0.1–0.25 | > 0.25 |
| TTFB (Time to First Byte) | < 600ms | 600ms–1.8s | > 1.8s |
| JS Bundle | < 200KB gzip | 200–500KB | > 500KB |
| Total Page Weight | < 1MB | 1–3MB | > 3MB |
Приклад розрахунку бюджету для інтернет-магазину
Для сайту електронної комерції ми встановили LCP < 2.0s, CLS < 0.05, INP < 150ms, TTFB < 400ms, JS bundle < 150KB gzip, загальна вага < 800KB. Ці значення отримані з аналізу 90-го перцентиля реального трафіку за останні 30 днів.Порівняння інструментів для встановлення бюджету
| Інструмент | Призначення | Інтеграція | Особливості |
|---|---|---|---|
| Lighthouse CI | Перевірка метрик Core Web Vitals | GitHub Actions, GitLab CI | Підтримка тверджень (assertions) |
| bundlesize | Контроль розміру бандлів | Будь-який CI | Проста конфігурація через JSON |
| WebPageTest | Детальний аудит завантаження | API | Можливість перевірки з різних локацій |
Чому Performance Budget критичний для кожного релізу?
Кожна метрика безпосередньо впливає на користувацький досвід і бізнес-показники. LCP > 2.5s збільшує показник відмов на 32% згідно з Google. INP > 200ms робить сайт «гальмівним». CLS > 0.1 викликає випадкові кліки не по тих елементах. TTFB > 600ms свідчить про проблеми сервера. Перевищення бюджету за будь-якою з них — сигнал до зупинки релізу. Performance Budget на базі Lighthouse CI в 10 разів точніший за ручні перевірки, що економить до 150 000 ₴ на рік на виправленні проблем після релізу. Оцінка на основі проєктів студії
Як часто потрібно оновлювати Performance Budget?
Бюджет не статичний. Ми рекомендуємо переглядати його кожні 3-6 місяців або після значних змін в архітектурі. Наприклад, при переході на SSR або додаванні нових бібліотек. Також варто коригувати пороги, якщо ви помічаєте, що метрики стабільно кращі — можна посилити бюджет, щоб стимулювати подальшу оптимізацію.
Як впровадити Performance Budget у CI/CD?
Lighthouse CI: бюджети за метриками
// .lighthouserc.json { "ci": { "collect": { "url": [ "http://localhost:3000", "http://localhost:3000/catalog", "http://localhost:3000/checkout" ], "numberOfRuns": 3, "settings": { "preset": "desktop", "throttlingMethod": "simulate" } }, "assert": { "assertions": { "categories:performance": ["error", { "minScore": 0.85 }], "categories:accessibility": ["error", { "minScore": 0.90 }], "categories:seo": ["warn", { "minScore": 0.90 }], "largest-contentful-paint": ["error", { "maxNumericValue": 2500 }], "cumulative-layout-shift": ["error", { "maxNumericValue": 0.1 }], "total-blocking-time": ["warn", { "maxNumericValue": 300 }], "uses-optimized-images": ["warn"], "unused-javascript": ["warn", { "maxNumericValue": 20000 }], "render-blocking-resources": ["warn"] } }, "upload": { "target": "temporary-public-storage" } } } Bundlesize: бюджет на розмір JS/CSS
// bundlesize.config.json { "files": [ { "path": ".next/static/chunks/main-*.js", "maxSize": "60 kB" }, { "path": ".next/static/chunks/pages/index-*.js", "maxSize": "50 kB" }, { "path": ".next/static/chunks/pages/catalog-*.js", "maxSize": "80 kB" }, { "path": ".next/static/css/*.css", "maxSize": "30 kB" } ] } GitHub Actions: перевірка бюджету
# .github/workflows/performance-budget.yml name: Performance Budget on: [pull_request] jobs: lighthouse-ci: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: '20' } - run: npm ci && npm run build - name: Start server run: npm start & - name: Wait for server run: npx wait-on http://localhost:3000 - name: Run Lighthouse CI run: npx lhci autorun env: LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }} bundlesize: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: '20' } - run: npm ci && npm run build - name: Check bundle size run: npm run bundlesize env: CI_REPO_OWNER: ${{ github.repository_owner }} CI_REPO_NAME: ${{ github.event.repository.name }} CI_PULL_REQUEST: ${{ github.event.pull_request.number }} CI_COMMIT_SHA: ${{ github.sha }} BUNDLESIZE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} Моніторинг у продакшені: SpeedCurve / DebugBear
Для безперервного моніторингу Core Web Vitals у реальному трафіку використовують RUM (Real User Monitoring):
// Збір Web Vitals з реального браузера import { onLCP, onINP, onCLS, onFCP, onTTFB } from 'web-vitals'; function sendToAnalytics(metric: any) { fetch('/api/vitals', { method: 'POST', body: JSON.stringify({ name: metric.name, value: metric.value, id: metric.id, page: window.location.pathname, }), headers: { 'Content-Type': 'application/json' }, }); } onLCP(sendToAnalytics); onINP(sendToAnalytics); onCLS(sendToAnalytics); -- P75 Core Web Vitals за останні 24 години SELECT name, PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY value) AS p75, COUNT(*) AS samples FROM web_vitals WHERE created_at >= now() - interval '24 hours' GROUP BY name; Наш підхід до налаштування
Ми починаємо з аудиту поточних метрик через Lighthouse CI та WebPageTest. Визначаємо реалістичні бенчмарки на основі бізнес-цілей. Конфігуруємо Lighthouse CI та bundlesize, інтегруємо в GitHub Actions. Навчаємо команду читати звіти та реагувати на перевищення. Гарантуємо, що після налаштування бюджет не буде перевищено без вашого відома.
Що входить у роботу
- Документація бюджету продуктивності з порогами по кожній метриці.
- Конфіги Lighthouse CI та bundlesize під ваш стек (Next.js, Vue, React).
- GitHub Actions workflow для автоматичної перевірки в кожному PR.
- Інтеграція з RUM-моніторингом (SpeedCurve або DebugBear).
- Дашборд з P75 метрик за 24 години.
- Навчання команди: як читати звіти та реагувати на перевищення.
Строки та вартість
Налаштування Performance Budget у CI з Lighthouse CI та bundlesize, RUM-моніторинг: 2–3 робочі дні. Вартість розраховується індивідуально залежно від складності проекту та кількості ключових сторінок.
Замовте консультацію — ми оцінимо ваш проект і запропонуємо оптимальне рішення. Зв'яжіться з нами, щоб налаштувати Performance Budget і захистити ваш сайт від просадок продуктивності.







