Lighthouse — это инструмент для анализа производительности веб-приложений, качества кода и SEO. Одним из ключевых аспектов оптимизации является кеширование сборок, которое позволяет ускорить повторные проверки и снизить нагрузку на ресурсы при частом запуске аудитов.
Lighthouse использует два основных подхода к кешированию:
Кеширование данных страницы Lighthouse может сохранять результаты загрузки ресурсов, сетевых запросов и рендеринга страницы, чтобы при повторных проверках не загружать их заново. Это особенно важно для сайтов с большим количеством статических ресурсов, таких как изображения, скрипты и стили.
Основные моменты:
Кеширование сборки отчетов Lighthouse хранит промежуточные данные аудита, такие как вычисленные метрики (First Contentful Paint, Time to Interactive и др.), чтобы их не пересчитывать при генерации разных форматов отчета (HTML, JSON).
Особенности:
Lighthouse позволяет управлять кешированием через объект конфигурации. Основные параметры:
const config = {
settings: {
// Включение/отключение кеширования ресурсов
disableStorageReset: true,
// Размер кеша для сборки в мегабайтах
cacheSize: 50
}
};
disableStorageReset предотвращает очистку кеша между
запусками аудита, что ускоряет повторные проверки.cacheSize задает лимит памяти, выделяемый под хранение
промежуточных данных. Оптимальный размер зависит от объема ресурсов на
странице и количества одновременно запускаемых аудитов.При использовании Lighthouse через Node.js кеширование работает следующим образом:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, output: 'json', disableStorageReset: false};
const runnerResult = await lighthouse('https://example.com', options);
console.log('Lighthouse score:', runnerResult.lhr.categories.performance.score);
await chrome.kill();
})();
Ключевые моменты:
disableStorageReset позволяет сохранять данные
между запусками.Для больших проектов кеширование интегрируется в CI/CD-процессы:
tmp или node-cache.Пример использования временного кеша в Node.js:
const fs = require('fs');
const path = require('path');
const cacheDir = path.resolve(__dirname, '.lighthouse-cache');
if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir);
const cacheFile = path.join(cacheDir, 'last-run.json');
if (fs.existsSync(cacheFile)) {
const cachedResult = JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));
console.log('Используем кеш:', cachedResult.timestamp);
}
// После завершения аудита сохраняем новый результат
fs.writeFileSync(cacheFile, JSON.stringify({timestamp: Date.now(), data: runnerResult.lhr}));
Кеширование может ускорять Lighthouse, но важно понимать влияние на точность:
Эти подходы к кешированию делают Lighthouse гибким инструментом, позволяющим балансировать между скоростью аудита и точностью метрик при работе с большими проектами и частыми проверками.