Deprecated функции

Lighthouse — это инструмент для аудита веб-страниц, ориентированный на оценку производительности, доступности, SEO и прогрессивных веб-приложений. С течением времени некоторые функции библиотеки устаревают и заменяются более современными и эффективными методами. Понимание устаревших функций критично для поддержки существующих проектов и корректной миграции на новые версии API.


Причины устаревания функций

Функции в Lighthouse могут стать устаревшими по нескольким причинам:

  1. Изменение веб-стандартов. Например, методы анализа DOM или метрики производительности могут перестать соответствовать современным рекомендациям W3C.
  2. Появление более точных или быстрых алгоритмов. Старые методы анализа ресурсов и сетевых запросов заменяются на более оптимизированные подходы.
  3. Упрощение API. Некоторые функции усложняют интеграцию с CI/CD системами и требуют замены на более универсальные методы.
  4. Обеспечение совместимости с новыми версиями браузеров. Старые API могут не поддерживаться Chrome DevTools Protocol, что делает их использование небезопасным.

Примеры устаревших функций

1. lighthouse(url, flags, config)

Ранее основной метод запуска аудита выглядел так:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

(async () => {
  const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
  const results = await lighthouse('https://example.com', {port: chrome.port}, null);
  console.log(results.lhr);
  await chrome.kill();
})();

Причина устаревания: параметр flags больше не рекомендуется, так как новые версии Lighthouse используют объект options с более гибкой структурой. Использование старого метода может привести к непредсказуемым результатам при обновлении Chrome или Lighthouse.

Современный подход:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

(async () => {
  const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
  const options = {port: chrome.port, output: 'json'};
  const results = await lighthouse('https://example.com', options);
  console.log(results.lhr);
  await chrome.kill();
})();

2. auditResults.categories

Ранее доступ к категориям отчета выполнялся напрямую через объект categories:

console.log(results.categories.performance.score);

Причина устаревания: структура объекта отчета была изменена для унификации формата JSON и поддержки новых категорий. Прямой доступ через categories может вызвать ошибки при парсинге старых данных.

Современный подход:

const {categories} = results.lhr;
console.log(categories.performance.score);

3. Старые метрики производительности (first-contentful-paint, speed-index)

Некоторые метрики постепенно заменяются на более точные показатели, такие как Largest Contentful Paint (LCP) и Cumulative Layout Shift (CLS). Использование устаревших метрик снижает точность аудита и не учитывает современные требования Core Web Vitals.

Пример замены:

// Старый вариант
const fcp = results.lhr.audits['first-contentful-paint'].numericValue;

// Новый вариант
const lcp = results.lhr.audits['largest-contentful-paint'].numericValue;

Отслеживание устаревших функций

Для корректного использования Lighthouse необходимо:

  • Регулярно проверять Changelog и документацию.
  • Использовать статический анализ кода для выявления вызовов устаревших API.
  • Тестировать отчеты на новых версиях библиотеки и браузера.

Lighthouse также выдает предупреждения о deprecated методах при запуске через командную строку или Node.js API. Эти предупреждения важно обрабатывать, чтобы заранее адаптировать код.


Практические рекомендации

  • Обновлять конфигурации: все кастомные конфиги, содержащие устаревшие настройки аудиторов или категорий, должны быть пересмотрены.
  • Использовать новые методы запуска: избегать прямого использования flags и auditResults.categories без проверки актуальности.
  • Пересматривать метрики: старые показатели производительности и доступности заменять на Core Web Vitals и современные аудиторы Lighthouse.
  • Автоматизировать проверку: интеграция Lighthouse в CI/CD системы с проверкой на deprecated функции помогает избежать внезапных сбоев при обновлении зависимостей.

Хотите, я могу подготовить отдельный подробный блок таблицы соответствия устаревших и новых функций Lighthouse с примерами кода и миграции? Это будет полезно как справочник для учебника.