Оптимизация изображений

Введение в Lighthouse и его метрики для изображений

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

Основные метрики, на которые ориентируется Lighthouse при анализе изображений:

  • Largest Contentful Paint (LCP) — время загрузки основного видимого контента страницы, часто включающего крупные изображения.
  • Total Blocking Time (TBT) — задержки, вызванные загрузкой тяжёлых ресурсов, включая большие изображения.
  • Cumulative Layout Shift (CLS) — смещения элементов при подгрузке изображений без указанных размеров.

Типы изображений и их влияние на производительность

  1. Растровые изображения (JPEG, PNG, GIF)

    • JPEG эффективен для фотографий и изображений с большим количеством цветов.
    • PNG подходит для изображений с прозрачностью и графики с ограниченной палитрой.
    • GIF используется редко, чаще для анимаций, но имеет большие размеры.
  2. Современные форматы (WebP, AVIF)

    • WebP снижает размер файла на 25–35% по сравнению с JPEG без потери качества.
    • AVIF обеспечивает ещё более высокую степень сжатия и поддерживает прозрачность.

Инструменты и методы оптимизации

1. Изменение размера изображений
  • Адаптивные изображения: использование атрибута srcset позволяет браузеру выбирать подходящий размер в зависимости от устройства и разрешения экрана.
  • Динамическая генерация изображений: серверные библиотеки (например, Sharp или ImageMagick) позволяют создавать версии изображений разных размеров при загрузке на сервер.
2. Сжатие изображений
  • Lossless сжатие: уменьшает размер без потери качества, например, с помощью pngcrush, optipng.
  • Lossy сжатие: снижает качество для уменьшения веса, например, через imagemin, mozjpeg.
3. Ленивое подгружение (Lazy Loading)
  • Использование атрибута loading="lazy" для снижает нагрузку на сеть и ускоряет LCP.
  • Динамическая подгрузка изображений через Intersection Observer позволяет загружать изображения только при необходимости.
4. Форматы и кодирование
  • Конвертация старых форматов в WebP или AVIF через серверные скрипты.
  • Оптимизация SVG: удаление ненужных атрибутов, комментариев и метаданных.

Анализ и рекомендации Lighthouse

Lighthouse автоматически проверяет страницы и выдаёт конкретные рекомендации для изображений:

  • Serve images in next-gen formats — использовать WebP или AVIF вместо JPEG/PNG.
  • Efficiently encode images — сжимать изображения без потери качества.
  • Properly size images — предоставлять изображения с подходящими размерами для каждого устройства.
  • Defer offscreen images — применять ленивую загрузку для невидимых на старте элементов.

Каждое предупреждение сопровождается оценкой потенциальной экономии трафика и времени загрузки. Например, изображение 2 МБ, которое можно конвертировать в WebP и сжать до 500 КБ, уменьшит загрузку на 75%.

Интеграция Lighthouse с JavaScript-проектами

Для Node.js-проектов возможна автоматизация анализа изображений через Lighthouse API:

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

async function runLighthouse(url) {
    const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
    const options = { logLevel: 'info', output: 'json', port: chrome.port };
    const runnerResult = await lighthouse(url, options);

    const report = runnerResult.lhr;
    console.log('Largest Contentful Paint:', report.audits['largest-contentful-paint'].displayValue);
    console.log('Оптимизация изображений:', report.audits['uses-responsive-images'].score);
    await chrome.kill();
}

runLighthouse('https://example.com');

Этот подход позволяет:

  • Автоматически проверять страницы на соответствие лучшим практикам.
  • Интегрировать Lighthouse в CI/CD, чтобы отслеживать влияние новых изображений на производительность.
  • Генерировать отчёты по каждому изображению, включая рекомендации по сжатию и формату.

Практические советы по оптимизации

  • Всегда указывать ширину и высоту изображений, чтобы избежать смещений (CLS).
  • Использовать SVG для иконок и графики с минимальным количеством цветов.
  • Комбинировать lazy loading и адаптивные изображения для мобильных устройств.
  • Периодически прогонять страницы через Lighthouse и анализировать отчёты, чтобы находить новые возможности оптимизации.

Резюме ключевых методов

  • Конвертация в WebP/AVIF.
  • Сжатие с lossless/lossy методами.
  • Использование атрибутов srcset и sizes.
  • Ленивое подгружение offscreen-изображений.
  • Задание размеров для всех элементов и .

Эти техники позволяют существенно сократить время загрузки страницы, уменьшить потребление трафика и повысить показатели Lighthouse, особенно LCP и CLS.