Lighthouse — это мощный инструмент для анализа производительности, доступности, SEO и прогрессивности веб-приложений. Помимо стандартного набора встроенных аудитов, библиотека предоставляет возможность их модификации для адаптации под специфические требования проекта. Рассмотрим ключевые методы изменения поведения существующих аудитов.
Каждый аудит в Lighthouse представлен как класс с набором обязательных свойств и методов. Основные элементы:
meta – объект, содержащий информацию
об аудите: id, title,
description, requiredArtifacts.defaultOptions – объект с настройками
по умолчанию.audit(artifacts, context) –
асинхронный метод, выполняющий анализ и возвращающий объект
результата.Результат аудита всегда должен содержать:
score – числовой показатель от 0 до 1 или
null.details – расширенная информация в формате таблицы,
списка или диаграммы.errorMessage – строка с описанием ошибки при
невозможности выполнения аудита.Изменение этих компонентов позволяет адаптировать стандартные проверки под нужды конкретного проекта.
auditСамый прямой способ модификации — это переопределение метода
audit. Например:
const OriginalAudit = require('lighthouse/lighthouse-core/audits/first-contentful-paint.js');
class CustomFCP extends OriginalAudit {
static async audit(artifacts, context) {
const result = await super.audit(artifacts, context);
// Добавляем кастомную метрику
if (result.score < 0.5) {
result.warning = 'FCP ниже рекомендуемого значения';
}
return result;
}
}
Преимущество этого подхода — сохранение всей внутренней логики оригинального аудита и добавление новых проверок или метрик.
Иногда необходимо изменить текстовое описание аудита
или его идентификатор. Для этого достаточно переопределить статическое
свойство meta:
class CustomFCP extends OriginalAudit {
static get meta() {
return {
...super.meta,
title: 'Первый контентный элемент (адаптированный)',
description: 'Изменённое описание аудита для внутренних целей проекта',
};
}
}
Такое переопределение полезно для внутренней документации или отображения результатов в собственных интерфейсах отчётности.
Многие встроенные аудиты используют defaultOptions для
настройки пороговых значений или поведения. Эти значения можно
модифицировать:
class CustomCLS extends require('lighthouse/lighthouse-core/audits/cumulative-layout-shift.js') {
static get defaultOptions() {
return {
...super.defaultOptions,
scorePOD: {
good: 0.05,
needsImprovement: 0.15,
},
};
}
}
Изменение опций позволяет подстроить пороговые значения под требования конкретного проекта без изменения логики расчёта.
Аудиты опираются на артефакты (artifacts), которые
предоставляют данные о странице. Для расширенной кастомизации можно
модифицировать артефакты через контекст аудита:
class CustomAudit extends OriginalAudit {
static async audit(artifacts, context) {
const customArtifacts = {
...artifacts,
MyCustomData: await fetchCustomMetrics(),
};
return super.audit(customArtifacts, context);
}
}
Таким образом, можно добавлять дополнительные данные для проверки, не изменяя исходный код Lighthouse.
Иногда требуется создать новый аудит, объединяющий результаты нескольких стандартных:
class CombinedAudit {
static async audit(artifacts, context) {
const fcpResult = await require('lighthouse/lighthouse-core/audits/first-contentful-paint.js').audit(artifacts, context);
const lcpResult = await require('lighthouse/lighthouse-core/audits/largest-contentful-paint.js').audit(artifacts, context);
return {
score: Math.min(fcpResult.score, lcpResult.score),
details: {
type: 'table',
items: [
{ metric: 'FCP', value: fcpResult.score },
{ metric: 'LCP', value: lcpResult.score },
],
},
};
}
}
Такой подход позволяет создавать комплексные проверки и объединять несколько стандартных метрик в единую оценку.
После модификации аудита его необходимо зарегистрировать для использования в запуске Lighthouse:
const { Runner } = require('lighthouse/lighthouse-core/runner');
const config = {
extends: 'lighthouse:default',
audits: [
'lighthouse/lighthouse-core/audits/first-contentful-paint.js',
'./custom-audits/custom-fcp.js',
],
};
Runner.run({ url: 'https://example.com', config }).then(results => {
console.log(results.lhr.audits);
});
В конфигурации можно заменять стандартные аудиты на кастомные или добавлять новые, расширяя функционал без изменения ядра Lighthouse.
super для
минимизации ошибок при обновлениях Lighthouse.defaultOptions и meta для
документирования кастомного поведения аудита.Модификация существующих аудитов в Lighthouse позволяет глубоко настраивать процесс анализа веб-приложений, интегрировать собственные бизнес-правила и создавать сложные метрики, оставаясь в рамках стандартного API.