Все статьиPerformance

Оптимизация производительности сайтов: 100/100 в Lighthouse

Практическое руководство по выведению Lighthouse Performance на 100 баллов. Оптимизация LCP, INP и CLS — закажите ускорение вашего веб-сайта в EvaLab!

9 мин readОбновлено 28.08.2026
Оптимизация производительности сайтов: 100/100 в Lighthouse — статья блога EvaLab

В современном интернете производительность сайта напрямую влияет на доходы бизнеса. По данным Google, увеличение времени загрузки страницы с 1 до 3 секунд повышает вероятность отказа (Bounce Rate) на 32%. Кроме того, алгоритмы Google Core Web Vitals учитывают скорость загрузки мобильной версии как важный фактор ранжирования в SEO.

Получение максимальной оценки 100/100 в панели Google Lighthouse — это не просто «зеленая иконка для отчета», а показатель наивысшего качества верстки, оптимизации ресурсов и эффективности JavaScript. В этом гайде эксперты EvaLab делятся исчерпывающим чеклистом по выводу производительности веб-приложения на 100 баллов.

Метрики Core Web Vitals в 2026 году

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

МетрикаНазваниеЦелевое значениеОписание
LCPLargest Contentful Paint$\le 1.2$ секВремя отрисовки самого крупного контентного элемента (картинка или баннер первого экрана)
INPInteraction to Next Paint$\le 200$ мсЗаменил FID. Измеряет отклик интерфейса на клики и нажатия клавиш пользователя
CLSCumulative Layout Shift$\le 0.05$Накопительный сдвиг элементов верстки при загрузке шрифтов и баннеров
FCPFirst Contentful Paint$\le 0.9$ секВремя появления первого элемента текста или логотипа
TBTTotal Blocking Time$\le 150$ мсСуммарная задержка главного потока (Main Thread) при загрузке скриптов

1. Оптимизация LCP (Largest Contentful Paint)

В 90% случаев главным LCP-элементом является фоновое или контентное изображение в шапке сайта (Hero Image).

Чек-лист ускорения LCP:

  1. Предзагрузка критической картинки: добавьте тег <link rel="preload"> или атрибут priority в Next.js Image.
  2. Формат AVIF и WebP: изображения в формате AVIF на 20–30% меньше по размеру, чем аналогичные WebP, при том же визуальном качестве.
  3. Размеры ресурсов (srcset & sizes): никогда не отдавайте мобильным устройствам десктопные картинки размером $2500 \times 1500$ px.

Пример разметки приоритетного баннера:

<!-- Предзагрузка в <head> -->
<link 
  rel="preload" 
  as="image" 
  href="/images/hero-banner.avif" 
  type="image/avif" 
  fetchpriority="high"
>

В Next.js / React:

import Image from 'next/image';

export function HeroSection() {
  return (
    <section className="relative h-[500px] w-full">
      <Image
        src="/images/hero-banner.avif"
        alt="Разработка веб-систем"
        fill
        priority // Отключает lazy-loading и ставит высший приоритет в очереди сетевых запросов
        sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 1200px"
        className="object-cover"
      />
    </section>
  );
}

2. Переход от FID к INP: Устранение задержек ввода

Метрика INP (Interaction to Next Paint) оценивает отзывчивость сайта во время всей сессии пользователя. Если при клике по меню или кнопке главный поток JS заблокирован «тяжелым» вычислением, INP уходит в «красную зону».

Приемы снижения INP и TBT:

  • Расщепление длинных задач (Long Tasks): любые JS-функции, работающие дольше 50 мс, должны разбиваться на микротаски.
  • Использование scheduler.yield() или requestIdleCallback: отдавайте управление браузеру перед следующей порцией расчетов.
// Оптимизация обработки больших массивов данных в главном потоке
async function processLargeDataset(items: Array<any>) {
  for (let i = 0; i < items.length; i++) {
    processItem(items[i]);

    // Каждые 50 элементов даем браузеру отрисовать кадр и обработать ввод
    if (i % 50 === 0) {
      if ('yield' in scheduler) {
        await scheduler.yield();
      } else {
        await new Promise((resolve) => setTimeout(resolve, 0));
      }
    }
  }
}
  • Перенос тяжелой логики в Web Workers: парсинг JSON, компрессию файлов и криптографию выполняйте в фоновых фоновых потоках.

3. Сведение CLS к нулю

Сдвиги макета возникают из-за картинок без указанных размеров (width/height), динамической вставки баннеров и асинхронной подгрузки шрифтов.

Как устранить CLS:

  1. Резервируйте место под картинки: используйте CSS-свойство aspect-ratio или фиксированные контейнеры с min-height.
  2. Оптимизация шрифтов: используйте font-display: swap совместно с подгонкой метрик шрифта через size-adjust (в Next.js это делает next/font).
/* Отсутствие прыжков текста при загрузке кастомного шрифта */
@font-face {
  font-family: 'CustomFont';
  src: url('/fonts/CustomFont.woff2') format('woff2');
  font-display: swap;
  ascent-override: 90%;
  descent-override: 20%;
  line-gap-override: 0%;
}

4. Оптимизация JS-бандла и HTTP-заголовков

  • Lazy Loading вторичных компонентов: динамический импорт диалоговых окон, тяжелых карт (Yandex/Google Maps) и графиков Recharts через React.lazy() или next/dynamic.
  • Компрессия Brotli: включите Brotli-сжатие на Nginx / Cloudflare. Оно эффективнее Gzip на 15–20%.
  • Кэширование статичности: заголовки Cache-Control: public, max-age=31536000, immutable для всех хэшированных бандлов JS/CSS.

Заключение

Достижение 100/100 в Lighthouse Performance требует комплексного подхода: от правильной стратегии предзагрузки LCP-ресурсов до глубокой оптимизации главного потока JS для отличного показателя INP.

Хотите ускорить ваш веб-сайт, поднять конверсию и занять топовые позиции в поисковых системах? Закажите профессиональный аудит и оптимизацию производительности в веб-агентстве EvaLab — мы гарантируем достижение высших показателей скорости!

Следующий шаг

Превратим идею в рабочую систему

Разберём задачу, сопоставим её с целями бизнеса и предложим план внедрения с понятными этапами и критериями результата.