Половина посетителей закрывает страницу, если она не открылась за три секунды. Причём терпение у человека с телефоном в метро заметно меньше, чем у вас за домашним компьютером, где всё «летает».
Зачем это знать
Скорость — это не только удобство. Поисковики измеряют её у настоящих посетителей и учитывают при ранжировании. То есть медленный сайт и находят хуже, и закрывают чаще.
Хорошая новость: на маленьком сайте без рекламы и десятка чужих виджетов скорость получается высокой сама собой. Испортить её можно всего несколькими способами, и каждый из них легко заметить, если знать, куда смотреть. Ничего сложного в этой работе нет: правится она в разметке и в настройках хостинга, а не переписыванием сайта.
Три числа, которыми меряют
Их называют Core Web Vitals — основные показатели работоспособности. Каждое отвечает на свой человеческий вопрос.
| Показатель | Вопрос, на который отвечает | Хорошо |
|---|---|---|
| LCP | Когда появилось главное — заголовок или большая картинка | до 2,5 с |
| INP | Быстро ли страница отвечает на нажатие | до 200 мс |
| CLS | Не прыгает ли содержимое, пока грузится | меньше 0,1 |
Третье — самое обидное. Страница открылась, человек начал читать, тут догрузилась картинка, текст подпрыгнул, и палец попал не по той ссылке. Лечится одной строкой: размеры картинки в разметке.
Что тормозит на самом деле
- Картинки. Почти всегда первое место. Неподготовленная фотография весит больше, чем весь остальной сайт. Подробности — в статье про изображения.
- Чужие скрипты. Счётчики, виджеты чатов, карты, кнопки соцсетей. Каждый тянет свой код с чужого сервера, и ваша страница ждёт.
-
Шрифты. Пока файл шрифта не загружен,
текста может не быть вовсе. Лечится свойством
font-display: swap: сначала показать системным шрифтом, потом заменить. -
Скрипты, которые блокируют разбор страницы.
Тег
<script>безdeferостанавливает сборку страницы, пока файл не загрузится и не выполнится.
<!-- скрипт не задерживает сборку страницы -->
<script src="/assets/js/main.js" defer></script>
<!-- шрифт первого экрана грузится заранее -->
<link rel="preload" href="/assets/fonts/inter.woff2" as="font"
type="font/woff2" crossorigin>
<!-- картинка знает свои пропорции до загрузки -->
<img src="/assets/img/hero.webp" width="800" height="500" alt="…">
Кеш: второй раз должен быть быстрее
Браузер запоминает загруженные файлы и при следующем открытии берёт их с диска. Правильно настроенный сайт первый раз грузится за секунду-две, а дальше открывается мгновенно: заново скачивается только сама страница, а стили, скрипты и шрифты берутся из памяти.
Настраивается это на стороне сервера — заголовками ответа, которые говорят, сколько хранить файл. На хостинге обычно достаточно нескольких строк в файле настроек, а типичный срок для стилей и шрифтов — от месяца до года. Чтобы обновление не потерялось, в имя файла при изменении добавляют версию.
Чем мерить
Первое правило измерения: не верьте своим ощущениям. Вы открываете сайт со своего компьютера, по домашней сети, и всё уже лежит у вас в кеше — это самые тепличные условия из возможных.
Мерить нужно инструментами. Вкладка «Сеть» в браузере показывает вес каждого файла и общий вес страницы; там же можно включить замедление сети, чтобы увидеть страницу глазами человека с плохим интернетом. Отдельные сервисы — например PageSpeed Insights — открывают сайт на своих серверах и выдают те самые три числа с подсказками, что чинить в первую очередь.
Считайте вес страницы целиком
Самая понятная величина для новичка — сколько всего мегабайт грузится при открытии. Для страницы с картинками нормально до мегабайта, для текстовой — сотни килобайт. Если счётчик показывает пять — ищите картинку, которую забыли уменьшить.
Что просить у нейросети
Вот голова моей страницы и список подключённых файлов с их весом (прилагаю). Разбери, что мешает быстрой загрузке.
Проверь: у всех ли скриптов стоит defer,
не блокируют ли что-то шрифты, есть ли
font-display: swap, правильно ли расставлен
loading="lazy" у картинок, у всех ли
картинок заданы размеры.
Расставь найденное по важности: что даст наибольший выигрыш за наименьшую работу. Общих советов вроде «используйте CDN» не давай — у меня обычный хостинг и сайт из полусотни страниц.
Как проверить, что получилось
- Открыть вкладку «Сеть», обновить страницу с очищенным кешем и посмотреть общий вес.
- Включить замедление сети и открыть страницу заново: то, что появляется последним, и есть ваша проблема.
- Прокрутить сверху донизу и убедиться, что ничего не прыгает.
- Проверить на телефоне через мобильный интернет, а не через домашний Wi-Fi.
- Открыть страницу второй раз и сравнить: при работающем кеше повторное открытие заметно быстрее первого.
Что стоит запомнить
- Три показателя: когда появилось главное, как быстро отвечает, не прыгает ли
- Главный тормоз почти всегда картинки, второй — чужие скрипты
-
Свои скрипты подключаются с
defer - Размеры картинок в разметке не дают странице прыгать
- Мерить инструментами и на плохой сети, а не по своим ощущениям