Lighthouse предоставляет возможность оценивать веб-приложения по различным метрикам производительности, доступности, SEO и прогрессивного веб-приложения (PWA). Одним из ключевых инструментов для контроля показателей являются бюджеты, которые позволяют задавать ограничения на ресурсы, загружаемые страницей, и отслеживать их соблюдение.
Бюджеты описываются в формате JSON и могут быть подключены к проекту либо через CLI, либо через конфигурационные файлы Lighthouse. Основные элементы бюджета:
resourceSizes – ограничения на размер загружаемых
ресурсов, например CSS, JS, изображения.resourceCounts – ограничения на количество ресурсов
определенного типа.timings – ограничения по времени загрузки ключевых
элементов страницы.scriptMetrics – метрики исполнения JavaScript
(например, общее время выполнения скриптов).Пример базовой структуры бюджета:
{
"resourceSizes": [
{
"resourceType": "script",
"budget": 250
},
{
"resourceType": "image",
"budget": 500
}
],
"resourceCounts": [
{
"resourceType": "stylesheet",
"budget": 5
}
],
"timings": [
{
"metric": "first-contentful-paint",
"budget": 2000
}
]
}
Resource Sizes (Размер ресурсов) Позволяет ограничивать общий размер определенного типа ресурсов. Основные поля:
resourceType – тип ресурса (script,
stylesheet, image, document,
font, other).budget – максимальный размер ресурса в килобайтах.Пример ограничения для изображений:
{
"resourceType": "image",
"budget": 300
}
Это ограничивает суммарный размер всех изображений на странице до 300 КБ.
Resource Counts (Количество ресурсов) Позволяет контролировать количество подключаемых файлов определенного типа. Например, ограничение количества стилей до 3 файлов:
{
"resourceType": "stylesheet",
"budget": 3
}Script Metrics (Метрики скриптов) Позволяет отслеживать время выполнения JavaScript на странице. Поля:
metric – тип метрики (scriptBootupTime,
totalByteWeight).budget – лимит в миллисекундах или килобайтах.Пример:
{
"metric": "scriptBootupTime",
"budget": 200
}
Это ограничивает время загрузки и выполнения скриптов до 200 мс.
Timings (Временные метрики) Позволяет задавать ограничения на ключевые показатели производительности. Поля:
metric – название метрики
(first-contentful-paint, interactive,
largest-contentful-paint и др.).budget – лимит времени в миллисекундах.Пример:
{
"metric": "largest-contentful-paint",
"budget": 2500
}Бюджеты можно использовать в двух основных сценариях:
Через CLI: Для этого используется флаг
--budgets-path, указывающий путь к JSON-файлу с
бюджетами:
lighthouse https://example.com --budgets-path=budgets.jsonЧерез Node API: Конфигурация бюджета передается как часть объекта настроек:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, budgets: require('./budgets.json')};
const results = await lighthouse('https://example.com', options);
console.log(results.lhr.audits);
await chrome.kill();
})();Бюджеты в Lighthouse позволяют формализовать требования к производительности и ресурсам, превращая субъективные оценки скорости и размера страницы в конкретные количественные показатели, легко интегрируемые в CI/CD процессы и автоматическое тестирование.