Скорость сайта для новичков: что реально ускоряет загрузку
Пошагово разберём, что реально ускоряет сайт: изображения, кэш, сервер, CSS/JS и Core Web Vitals. Чек-лист и простые тесты для новичков.

Что значит «быстрый сайт» и как это измеряют
«Быстрый сайт» — это не один магический показатель, а то, насколько быстро пользователь видит полезный контент, может взаимодействовать со страницей и не раздражается из‑за скачков верстки.
Важно различать два похожих, но не одинаковых улучшения:
- «Страница стала легче» — вы уменьшили общий вес загрузки (например, с 6 МБ до 2 МБ). Это почти всегда помогает, но не гарантирует, что сайт начнёт ощущаться быстрым.
- «Стала быстрее ощущаться» — пользователь быстрее видит главный блок, может кликнуть кнопку и не наблюдает прыгающий текст. Иногда этого можно добиться и без сильного снижения веса — например, поменяв порядок загрузки или вынеся лишнее из критического пути.
Метрики, которые стоит знать новичкам
Чтобы не гадать «на глаз», удобнее смотреть на несколько метрик — каждая отвечает за свою часть впечатления:
- LCP (Largest Contentful Paint) — когда на экране появился главный крупный элемент (часто это герой‑блок, заголовок или большое изображение). Это про «страница загрузилась для человека».
- INP (Interaction to Next Paint) — насколько быстро сайт реагирует на действия (клики, ввод). Это про «сайт не тупит».
- CLS (Cumulative Layout Shift) — насколько сильно прыгает верстка во время загрузки. Это про «ничего не уезжает из‑под курсора».
- TTFB (Time to First Byte) — как быстро сервер начал отдавать ответ. Это про «сервер не тормозит на старте».
Почему одного показателя недостаточно
Можно легко получить ситуацию, где LCP хороший, но INP плохой: крупный контент показался быстро, а кнопки нажимаются с задержкой из‑за тяжёлого JavaScript. Или наоборот: сайт отзывчивый, но LCP высокий, потому что главный визуальный элемент грузится слишком долго.
Поэтому задача — собрать понятную картину из нескольких сигналов, а не гнаться за одной цифрой.
Что будет дальше в статье
Дальше разберём, как быстро протестировать сайт, найти типовые узкие места и составить понятный план работ: от изображений и шрифтов до JavaScript/CSS, сервера, кэша и CDN. В конце — приоритеты на 1–2 недели и способы проверить, что изменения действительно ускорили загрузку.
Быстрая диагностика: чем и как тестировать
Ускорение сайта начинается не с «оптимизаций наугад», а с короткой и повторяемой диагностики. Цель — получить честную базовую точку, чтобы потом сравнить «до/после» и понимать, что именно сработало.
Инструменты, которые реально пригодятся
PageSpeed Insights (PSI) — быстрый старт. Показывает и лабораторный отчёт Lighthouse, и (если есть) данные реальных пользователей из Chrome UX Report.
Lighthouse (в Chrome DevTools или CLI) — удобен для повторных прогонов на одном компьютере и для проверки конкретной страницы перед релизом.
WebPageTest — для более «приближённых к реальности» проверок: выбор устройства, региона, скорости сети, повторный визит, waterfall (кто и когда грузится).
Chrome DevTools (Network / Performance) — чтобы увидеть причины: тяжёлые файлы, блокирующие ресурсы, долгие запросы, плохой кэш.
Как сделать замер правильно (и не обмануть себя)
- Откройте страницу в инкогнито, отключите расширения (они часто вмешиваются в загрузку).
- Сделайте 3–5 прогонов и смотрите на медиану: один «удачный» запуск ничего не доказывает.
- Фиксируйте условия: устройство, браузер, регион, скорость сети. Меняете условия — меняются результаты.
- Для сравнения «до/после» тестируйте один и тот же URL (с теми же параметрами) и одинаковый сценарий: первый визит или повторный.
Лабораторные тесты vs данные реальных пользователей
Лабораторные тесты (Lighthouse/WebPageTest) — это контролируемая среда: удобно искать узкие места и проверять правки.
Данные реальных пользователей (полевая статистика в PSI/CrUX, аналитика, RUM) — показывают, как сайт ведёт себя у людей: на слабых телефонах, с нестабильной сетью, с «тяжёлыми» страницами.
Правило простое: лаборатория объясняет “почему”, а реальные данные подтверждают “стало ли лучше для большинства”.
Как сохранить «до/после» и не потеряться в цифрах
Сохраните:
- ссылку на отчёт PSI (или скрин ключевых метрик);
- HTML/PDF отчёт WebPageTest или Lighthouse;
- короткую заметку: дата, условия теста, что меняли.
Хорошая привычка — завести одну таблицу «изменение → эффект» и добавлять туда результаты после каждого шага.
Какие показатели записать перед началом оптимизации
Запишите минимум:
- LCP, INP, CLS (Core Web Vitals — воспринимаемая скорость и стабильность);
- TTFB (как быстро отвечает сервер);
- Вес страницы и число запросов (часто сразу видно «перегруз» изображениями/скриптами);
- Кэширование статики (есть ли cache-control, повторный визит быстрее или нет).
Этого набора достаточно, чтобы осмысленно выбрать следующие шаги и проверить результат без самообмана.
Откуда берётся торможение: типовые узкие места
Медленная загрузка почти всегда объясняется несколькими повторяющимися причинами. Хорошая новость: большинство из них дают заметный эффект уже после первых правок.
1) Тяжёлые изображения
Частый сценарий: на странице стоят фотографии по 3–8 МБ, иногда ещё и в несколько раз больше нужного разрешения. Браузеру приходится скачивать лишнее, а мобильная сеть и слабые устройства «проваливаются» сильнее всего.
Важно: даже один «hero»-баннер наверху страницы может сделать сайт визуально медленным — потому что именно его ждёт пользователь.
2) Лишний или перегруженный JavaScript
Вторая типовая причина — слишком много скриптов: виджеты, аналитика, чаты, A/B‑тесты, а также «тяжёлые» библиотеки, которые подключены «на всякий случай». Итог: страница может скачаться, но долго оставаться неотзывчивой — клики и прокрутка ощущаются с задержкой.
Практическое правило: если функция не влияет на первый экран и первые действия пользователя, ей не место в критическом пути загрузки.
3) Медленный сервер и бэкенд
Если сервер долго формирует HTML (например, из‑за базы данных, тяжёлых запросов или отсутствия кэша), тормоз начинается ещё до загрузки картинок и скриптов. Это особенно заметно на главной и страницах со сложными блоками.
Почему «ускорение» часто упирается в главную страницу и шаблон
Главная обычно самая «нагруженная»: много блоков, слайдеры, спецэффекты, максимум трекинга. А шаблон/общие компоненты (шапка, меню, футер) подключаются на всех страницах. Поэтому один неудачный скрипт в шаблоне замедляет весь сайт, а не одну страницу.
Порядок работ: сначала крупные выигрыши
Начинайте с того, что даёт 80% эффекта: изображения первого экрана, самые тяжёлые скрипты, задержки на сервере. Мелкие правки вроде микро‑минификации имеют смысл позже — иначе легко потратить время на незаметный результат.
Как избежать «оптимизировали — стало хуже»
Делайте изменения по одному, фиксируйте «до/после» и держите быстрый откат. Частые проблемы после оптимизации — поломка верстки из‑за агрессивного объединения файлов, «скачущие» блоки из‑за неправильно заданных размеров, а также отложенная загрузка, которая случайно откладывает важное.
Мини-чек: что проверить в первую очередь
- Самые тяжёлые изображения на главной и в первом экране
- Список сторонних скриптов (чат/виджеты/аналитика) и их реальная необходимость
- Время ответа сервера на главной и типовых страницах
- Что подключается глобально в шаблоне (общие CSS/JS) и можно ли облегчить
- Нет ли «каруселей»/анимаций, которые грузят процессор и мешают прокрутке
Как браузер загружает страницу: важное без лишней теории
Когда вы открываете страницу, браузер делает две работы параллельно: скачивает ресурсы и пытается как можно раньше показать пользователю осмысленный первый экран. В ускорении почти всегда выигрывает тот, кто быстрее выводит ключевой контент (LCP) и быстрее становится «живым» для действий (INP).
Критический путь рендеринга — зачем он вам
Браузер получает HTML, читает его сверху вниз и по ходу обнаруживает ссылки на CSS, JavaScript, шрифты, изображения. Часть этих файлов нужна, чтобы вообще начать рисовать страницу: это и есть критический путь рендеринга. Если в нём есть тяжёлые или медленные ресурсы, первый экран задерживается даже при хорошем интернете.
Блокирующие ресурсы: главные подозреваемые
CSS часто блокирует отрисовку: пока не загрузится и не применится критичный CSS, браузер не хочет показывать «поломанную» страницу.
JavaScript может блокировать разбор HTML и запуск рендера, если подключён без defer/async или если выполняет много работы на старте. Это бьёт не только по скорости появления первого экрана, но и по отзывчивости — INP.
Почему «меньше запросов» не всегда значит «быстрее»
Раньше объединять всё в один файл было почти универсальным советом. Сейчас HTTP/2/3 позволяют параллельно грузить несколько файлов, и иногда лучше разделить: например, отдать маленький критичный CSS быстро, а остальное догрузить позже. Один огромный бандл может замедлить LCP и ухудшить INP, потому что его нужно скачать, распаковать и выполнить.
Простой ориентир: что должно успеть до первого экрана
До появления первого экрана важно успеть: HTML, критичный CSS, минимально необходимый JS (или вообще без него), а также изображения/шрифты, которые участвуют в LCP-элементе (герой-блок, заголовок, карточка товара). Всё остальное — кандидаты на отложенную загрузку.
Изображения: главный источник ускорения почти всегда
Если страница «тяжёлая», чаще всего виноваты изображения: они занимают львиную долю трафика и напрямую влияют на ощущение скорости. Хорошая новость — ускорение здесь обычно даёт самый заметный эффект без переписывания сайта.
Сжать и выбрать формат: AVIF/WebP vs JPEG/PNG
- WebP — универсальный выбор для фотографий и многих иллюстраций: вес обычно меньше, качество приемлемое.
- AVIF — ещё более компактный, но не везде удобен в обработке и иногда может кодироваться медленнее. Имеет смысл для «тяжёлых» фото.
- JPEG стоит оставить, если у вас уже настроено разумное сжатие и нет возможности конвертировать всё сразу (или если конвертация ухудшает картинку).
- PNG оставляйте для прозрачности и графики, где важны чёткие края (логотипы, схемы). Для простых иконок часто лучше SVG.
Практика: начните с 10–20 самых «тяжёлых» картинок (часто это баннеры и фото в карточках).
Правильные размеры: не отдавать 4000px там, где нужно 800px
Классическая ошибка — загружать огромную картинку и уменьшать её «на глаз» через CSS. Браузер всё равно скачает оригинал.
Правило простое: отдавайте файл примерно под реальный размер отображения, с небольшим запасом под Retina (обычно 2×).
Адаптивные изображения: srcset/sizes для разных экранов
Один файл «на все случаи» почти всегда лишний. Лучше дать браузеру набор вариантов:
<img
src="/images/product-800.webp"
srcset="/images/product-400.webp 400w, /images/product-800.webp 800w, /images/product-1200.webp 1200w"
sizes="(max-width: 600px) 90vw, 600px"
alt="Товар"
>
Так на телефоне не будет скачиваться «настольная» версия.
Ленивая загрузка для изображений ниже первого экрана
Для картинок, которые пользователь увидит только после прокрутки, включайте ленивую загрузку:
<img loading="lazy" decoding="async" ...>
Важно: не делайте lazy для главного изображения вверху страницы — это может ухудшить скорость первого экрана.
Оптимизация «hero»-изображения: приоритет, размер, качество
«Hero» (картинка/баннер в первом экране) часто определяет ощущение быстроты. Что помогает:
- сделать файл как можно меньше без заметной потери качества;
- использовать WebP/AVIF и правильный размер;
- задать приоритет загрузки:
<img fetchpriority="high" ...>
Если начать с hero и пары самых популярных страниц, результат по времени загрузки обычно виден сразу.
Шрифты и видимый текст: меньше веса и меньше задержек
Шрифты часто «едят» время незаметно: страница уже почти загрузилась, но текст появляется поздно, меняет размер или «прыгает». Улучшения здесь обычно быстрые и не требуют переписывать сайт.
1) Сколько шрифтов вам реально нужно
Начните с простого аудита: сколько семейств и начертаний (Regular/Bold/Italic) подключено, и какие языки нужны.
- Если у вас один заголовочный шрифт и один для текста — это уже нормально.
- Частая ошибка: тянуть 6–10 начертаний «на всякий случай», хотя реально используются 2–3.
- Для кириллицы вес заметно выше, поэтому лишние начертания особенно дорогие.
2) WOFF2 и subset: уменьшайте вес файлов
Используйте формат WOFF2 (почти всегда самый компактный). Дальше — subset: шрифт можно «обрезать» до нужных символов (например, только латиница+кириллица без редких знаков). Это уменьшает размер и ускоряет появление текста.
Важно: делайте subset осмысленно — если на сайте есть отзывы, имена или валюты, проверьте, что нужные символы не пропадут.
3) font-display: чтобы текст не исчезал и меньше прыгал
Добавьте font-display: swap; (или близкие варианты). Тогда браузер покажет текст системным шрифтом сразу, а кастомный подгрузит позже.
Чтобы уменьшить «прыжки» при замене шрифта, используйте метрики (например, size-adjust) или подберите системный шрифт-замену максимально похожий по ширине.
4) Preload — только для критичных шрифтов
preload помогает, но его легко переиспользовать. Предзагружайте только 1–2 ключевых файла: шрифт основного текста или самый заметный в первом экране.
5) Когда системные шрифты — лучший выбор
Для интерфейсных текстов (кнопки, формы, навигация) системные шрифты — это нормально: они быстрые, уже есть у пользователя и отлично читаются. Часто выигрыш в скорости и стабильности верстки важнее «уникальности» типографики.
JavaScript и CSS: что реально ускоряет, а что нет
JavaScript и CSS влияют на скорость не только «весом» файлов. Гораздо важнее, когда они загружаются и мешают ли браузеру показать первый экран. Частая ситуация: страница «скачалась быстро», но пользователь всё равно ждёт, пока скрипты отработают и интерфейс начнёт реагировать.
Минификация и «удалить лишнее» — это разные задачи
Минификация CSS/JS (убрать пробелы, сократить имена, упаковать) уменьшает размер, но обычно даёт умеренный эффект.
Сильнее влияет удаление неиспользуемого кода:
- лишние библиотеки (например, целый UI‑фреймворк ради одной кнопки);
- «плагин на всякий случай», который подключён на всех страницах;
- CSS для блоков, которых нет на текущей странице.
Практический ориентир: лучше убрать 100 КБ реально неиспользуемого кода, чем сэкономить 30 КБ минификацией.
Разделение кода: грузить только то, что нужно на странице
Если сайт состоит из разных типов страниц (главная, каталог, карточка товара, блог), им редко нужен один и тот же набор скриптов. Разделение (code splitting) помогает не тащить «всё сразу».
Примеры, что стоит грузить отдельно:
- слайдер/галерею — только там, где она есть;
- карту — только на странице контактов;
- редактор/личный кабинет — только для авторизованных.
Это уменьшает объём первого запроса и снижает шанс «заморозить» страницу тяжёлым JS.
Отложенная загрузка: defer/async и типичные ошибки
Самое простое ускорение — перестать блокировать отрисовку.
deferподходит для ваших скриптов, которые нужны после разбора HTML (часто — лучший выбор).asyncхорошо для независимых скриптов, но порядок выполнения не гарантирован.
Типичные ошибки:
- ставят
asyncна зависимые скрипты и получают «ломается через раз»; - подключают скрипты в
<head>безdefer, из-за чего первый экран появляется позже; - оставляют тяжёлую инициализацию на старте, хотя её можно делать после первого отображения (например, по событию или когда блок появился в зоне видимости).
Третьи стороны: главный скрытый тормоз
Чат, аналитика, пиксели, виджеты отзывов и A/B‑тесты часто добавляют десятки запросов и выполняют много JS. Они могут ухудшать отзывчивость: страница визуально готова, но клики «задумываются».
Практика на 30 минут: инвентаризация скриптов
Откройте страницу, выпишите все подключаемые JS/CSS (включая сторонние). Для каждого отметьте: «зачем нужен», «на каких страницах нужен», «можно ли грузить позже». Затем удалите или отключите хотя бы 1–2 пункта без понятной пользы — это часто даёт самый быстрый и заметный результат.
Сервер и бэкенд: как уменьшить TTFB
TTFB (Time To First Byte) — это время от клика по ссылке до момента, когда браузер получил первый байт ответа от сервера. Проще: сколько «думает» ваш сервер, прежде чем вообще начать отдавать страницу.
Если TTFB высокий, страница кажется медленной даже при идеальных картинках и CSS: браузер ждёт стартового сигнала.
Откуда берётся высокий TTFB
Обычно виноват не «интернет у пользователя», а задержки внутри цепочки:
- приложение долго собирает HTML (много вычислений, лишние обращения к сервисам);
- база данных отвечает медленно (тяжёлые запросы, нет индексов, много запросов вместо одного);
- нет кэширования, и всё пересчитывается на каждый визит;
- хостинг перегружен или серверу не хватает ресурсов.
Кэш на сервере и на уровне приложения
Кэш нужен, чтобы не делать одну и ту же работу снова и снова.
- Кэш страницы/фрагментов: если главная или список товаров меняются не каждую секунду, их можно хранить готовыми и отдавать сразу.
- Кэш результатов запросов: популярные данные (например, «топ-товары», «курсы валют») можно держать в памяти (Redis/Memcached) и обновлять по расписанию.
Практическое правило: кэшируйте то, что часто запрашивают и редко меняют — TTFB обычно падает заметно.
База данных: «не плодить лишнее»
Без углубления в SQL, есть три частых улучшения:
-
Уберите лишние запросы: вместо 50 мелких — 1–3 понятных.
-
Возвращайте меньше данных: не тяните «все поля», если на странице видны только 5.
-
Следите за индексами для фильтров и сортировок (это один из самых дешёвых способов ускориться).
HTTP/2 и HTTP/3: что дают
HTTP/2 обычно ускоряет загрузку за счёт более эффективной передачи множества файлов по одному соединению (особенно заметно на страницах с большим числом мелких ресурсов).
HTTP/3 может помочь на мобильных сетях и при потере пакетов, но эффект зависит от аудитории и инфраструктуры. Главное: эти протоколы не компенсируют медленный бэкенд — они улучшают доставку, а не время «думания».
Когда пора менять хостинг
О смене хостинга стоит думать, если:
- после оптимизаций и кэша TTFB всё равно высокий;
- в пиковые часы сервер «захлёбывается» (рост очередей, ошибки 5xx);
- мониторинг показывает постоянную нехватку CPU/RAM.
Это не магия: более быстрые ресурсы и адекватная конфигурация часто дают прямой прирост именно по TTFB.
Кэширование и CDN: ускоряем повторные визиты и статику
Если сайт «тормозит» на втором и третьем визите, часто виновато отсутствие кэширования. Правильно настроенный кэш позволяет браузеру не скачивать одни и те же файлы заново, а CDN — отдавать статику с ближайшего узла и разгружать ваш сервер.
Browser cache: что кэшировать и на какой срок
Кэшировать стоит почти всю статику: CSS, JS, шрифты, изображения, иконки. Идеальная схема — «долго кэшируем, но безопасно обновляем»:
- Для файлов со сменой имени при обновлении (например,
app.4f3a1c.js) ставьте долгий срок:Cache-Control: public, max-age=31536000, immutable. - Для файлов без хэша в имени (например,
main.css) — короче, иначе пользователи будут видеть старую версию:max-ageот нескольких минут до дня.
Ключевая мысль: долгий кэш работает только если вы гарантируете обновление URL при релизе (хэш в имени, versioning).
CDN: когда помогает и какие файлы лучше отдавать через него
CDN особенно полезен, если у вас аудитория из разных регионов или сервер не справляется с пиками. Через CDN логичнее всего отдавать:
- изображения и видео-превью;
- CSS/JS бандлы;
- шрифты;
- файлы загрузок (PDF, архивы).
Динамический HTML тоже можно отдавать через CDN, но только при чётких правилах кеширования.
Сжатие: gzip/brotli, где включается и что проверить
Сжатие заметно ускоряет передачу HTML/CSS/JS/JSON.
- Brotli предпочтительнее (обычно для HTTPS), gzip — базовый вариант.
- Включается на веб‑сервере (Nginx/Apache), в платформе хостинга или на CDN.
Проверьте, что сервер реально сжимает ответы: в заголовках должен быть Content-Encoding: br или gzip.
Кэширование HTML: осторожно с динамическими страницами
HTML кэшируют аккуратно: на страницах с личным кабинетом, корзиной, разными ценами и персональными блоками легко «раздать чужое». Для таких страниц чаще ставят Cache-Control: no-store.
Для публичных страниц (лендинги, статьи) возможны варианты:
- короткий кэш (
max-age=60…300) + обновление по purge; - кэш на CDN с правилами по cookies/заголовкам.
Проверка заголовков Cache-Control/ETag простым способом
Самый простой путь — DevTools → Network → клик по файлу → вкладка Headers. Ищите:
Cache-Control(есть лиmax-age,public,no-store);ETagилиLast-Modified(помогают валидировать кэш);Ageиcf-cache-status/аналоги (если используется CDN).
Альтернатива из консоли:
curl -I https://example.com/assets/app.4f3a1c.js
Если видите Cache-Control: max-age=0 на статике — это почти всегда быстрый повод для исправления.
Core Web Vitals: быстрые победы по LCP, INP и CLS
Core Web Vitals — это три метрики, которые хорошо отражают «ощущение скорости»: как быстро появляется главный контент, насколько отзывчив интерфейс и не «прыгает» ли страница при загрузке. Часто улучшения находятся в паре очевидных мест.
LCP: ускоряем первый экран
LCP (Largest Contentful Paint) — время, когда на экране появляется самый крупный видимый элемент (часто это геро‑картинка или крупный заголовок).
Быстрые рычаги:
- Картинка первого экрана: уменьшить размер и вес (WebP/AVIF), не грузить «впрок» огромные оригиналы. Не включайте ленивую загрузку для главного изображения — оно должно прийти как можно раньше.
- CSS: критические стили для первого экрана должны быть доступны сразу. Если стили блокируют отрисовку, LCP почти всегда ухудшается.
- Сервер: если высокий TTFB, страница «стоит» до начала загрузки ресурсов. Начните с упрощения серверной обработки и кэширования.
INP: делаем интерфейс отзывчивым
INP (Interaction to Next Paint) показывает, насколько быстро сайт реагирует на действия пользователя.
Что работает чаще всего:
- Убрать тяжёлые обработчики на клики/скролл/ввод (например, сложные вычисления прямо в обработчике).
- Разрезать длинные задачи: если JavaScript занимает поток на сотни миллисекунд, браузер не может быстро перерисовать интерфейс. Разбивайте работу на части (таймеры,
requestAnimationFrame), откладывайте второстепенное.
CLS: убираем «прыжки» верстки
CLS (Cumulative Layout Shift) растёт, когда элементы неожиданно сдвигаются.
Быстрые исправления:
- Резервируйте место под изображения, видео, рекламные блоки и встраиваемые виджеты (задавайте размеры или фиксированные контейнеры).
- Осторожнее со шрифтами: резкая смена шрифта при догрузке может сдвигать текст. Настройте загрузку так, чтобы внешний вид менялся минимально.
Что исправлять сначала по отчёту Lighthouse
-
Сначала LCP и CLS: они обычно дают самый заметный эффект «на глаз».
-
Затем INP: найдите «длинные задачи» и тяжелые скрипты (часто это аналитика, виджеты, большие бандлы).
-
Не гонитесь за 100/100: важнее убрать главные узкие места, а не косметические предупреждения.
Как подтвердить улучшение
Сделайте повторный тест тем же способом: тот же URL, устройство/эмуляция, режим (инкогнито, без расширений). Сравните отчёты «до/после» и зафиксируйте изменения: какие метрики улучшились и за счёт чего. Лучше всего хранить результаты в виде короткого журнала работ — так вы не потеряете причинно‑следственную связь.
Ошибки новичков и мифы про ускорение
Ускорение сайта часто начинают с «волшебных» решений и гонки за идеальными цифрами. Это нормально, но именно здесь проще всего потратить время впустую — или даже сломать важные вещи.
Миф 1: «Плагин ускорения решит всё»
Плагины и готовые оптимизаторы действительно помогают — но только в рамках того, что уже позволяет ваш сайт. Они не исправят тяжёлые изображения, медленный хостинг, неэффективные запросы к базе или перегруженный фронтенд.
Главная ошибка — включить все галочки сразу: агрессивная минификация, объединение файлов, отсрочка всего JavaScript, «умная» оптимизация шрифтов. В итоге страница может стать быстрее в тесте, но перестать нормально работать у реальных пользователей.
Миф 2: «Нужно обязательно 100/100 в PageSpeed»
100/100 — приятная цель, но не обязательная. Важно не «идеально в лаборатории», а заметно лучше для пользователя: чтобы первый крупный элемент появлялся быстро, сайт откликался без задержек, а блоки не прыгали. Иногда последние баллы требуют жертв: отключить полезный виджет, упростить аналитику или ухудшить качество контента.
Когда оптимизация становится слишком агрессивной
Частые симптомы:
- «Сломалась» корзина/оформление заказа (скрипты выполняются слишком поздно).
- Не открывается меню, модальные окна, фильтры.
- Исчезла часть стилей (неправильная минификация/объединение CSS).
- Появились ошибки в консоли.
Если вы используете отложенную загрузку JavaScript, применяйте её точечно: критические скрипты (корзина, авторизация, формы) должны работать сразу.
Как не ухудшить SEO и доступность
Оптимизируя скорость, легко навредить другому:
- Не «прячьте» контент ради баллов: текст и важные элементы должны быть в HTML, а не появляться только после JS.
- Следите за ленивой загрузкой: изображения выше первого экрана не должны ждать скролла.
- Не убирайте доступные подписи, фокус и состояния элементов ради «чистоты» CSS.
Проверка после правок: что обязательно пройти
После каждого изменения проверьте руками:
- формы (обратная связь, подписка, вход/регистрация);
- корзину и оплату (если есть);
- трекинг и цели (аналитика, пиксели);
- адаптив: мобильное меню, карточки, модальные окна.
Когда лучше откатить и выбрать другой подход
Откатывайте изменение, если оно:
- ломает ключевой сценарий (покупка, заявка, вход);
- даёт прирост только в тестах, но ухудшает поведение на реальных устройствах;
- добавляет нестабильность (то работает, то нет).
Практика простая: делайте правки по одной, фиксируйте результат и сохраняйте возможность быстро вернуться к рабочей версии.
План работ на 1–2 недели и контроль результата
Чтобы ускорение не превратилось в «сделали что‑то и не уверены, помогло ли», работайте короткими итерациями: один набор изменений → замер → вывод → следующий шаг. Ниже — практичный план на 1–2 недели, который обычно даёт заметный эффект без героизма.
Чек-лист по шагам (в правильном порядке)
-
Изображения: сжать и перевести в современные форматы, убрать лишние размеры, включить ленивую загрузку там, где это уместно.
-
JS/CSS: убрать лишнее, отложить неважное, проверить, что «красивые» эффекты не блокируют первый экран.
-
Сервер: найти причины долгого ответа (TTFB), оптимизировать запросы/рендер, включить сжатие.
-
Кэш: настроить заголовки для статики, повторные визиты должны быть быстрее.
-
Core Web Vitals: точечно добить LCP/INP/CLS тем, что реально мешает пользователю.
Журнал изменений: «что сделали — что изменилось»
Заведите простой лог (таблица или заметка). На каждую правку — одна строка:
- Дата/версия, что поменяли (максимально конкретно), где (страницы/шаблоны)
- Ожидание (например: «LCP должно снизиться на главной»)
- Факт: показатели «до/после» по тесту и по реальным пользователям (если есть)
- Откат/следующий шаг
Так вы быстро поймёте, какие действия дают прирост, а какие — только шум.
Регулярный мониторинг: расписание и алерты
- Каждый релиз: быстрый прогон ключевых страниц (главная, категория/листинг, карточка, форма).
- Раз в неделю: сверка трендов по Core Web Vitals.
- Раз в месяц: полный аудит «что утяжелело» (новые скрипты, виджеты, баннеры).
Если есть мониторинг, поставьте алерты на рост TTFB, ухудшение LCP/INP/CLS и резкое увеличение веса страницы.
Что автоматизировать в сборке/деплое
Автоматизация экономит время и снижает риск регрессий: оптимизация изображений, минификация, проверка лимитов (например, «JS не больше X»), и обязательный отчёт о производительности в CI.
Если вы делаете продукт с нуля или регулярно выпускаете новые страницы, удобно, когда сборка и инфраструктура изначально заточены под скорость. Например, в TakProsto.AI можно собирать веб‑приложения через чат (фронтенд на React, бэкенд на Go с PostgreSQL), а затем быстро деплоить и откатывать изменения через снапшоты/rollback. Это помогает держать «короткий цикл» из этой статьи: правка → замер → вывод — без долгого ручного пайплайна.
Если нужна помощь с внедрением и поддержкой, посмотрите варианты на /pricing или материалы в /blog — там проще выбрать подход по бюджету и команде.
FAQ
Что вообще значит «быстрый сайт» и какие метрики важнее всего?
Ориентируйтесь не на одну цифру, а на связку:
- LCP — как быстро появляется главный контент.
- INP — насколько быстро реагируют клики/ввод.
- CLS — «прыгает» ли верстка.
- TTFB — как быстро сервер начинает отвечать.
Практика: сначала добейтесь ощутимого улучшения на главной/шаблоне и на самом популярном типе страниц — это даст эффект всему сайту.
Какие «нормальные» значения LCP/INP/CLS и когда пора бить тревогу?
Можно использовать ориентиры Core Web Vitals:
- LCP: хорошо — до 2.5 с, нужно улучшать — выше.
- INP: хорошо — до 200 мс, плохо — заметные задержки реакции.
- CLS: хорошо — до 0.1, если выше — ищите сдвиги.
Для сервера часто берут как сигнал:
- TTFB: старайтесь держать примерно до 0.8 с (чем ниже, тем лучше), особенно на главной.
Как правильно замерять скорость, чтобы не обмануть себя?
Минимальный повторяемый сценарий:
- Тестируйте в инкогнито, без расширений.
- Делайте 3–5 прогонов и берите медиану.
- Фиксируйте условия: устройство, сеть, регион, первый/повторный визит.
Инструменты по уровню глубины:
- PageSpeed Insights — быстро и с данными CrUX (если есть).
- Lighthouse — удобно гонять перед релизом.
- WebPageTest — лучший для waterfall и «как у реальных» условий.
- DevTools Network/Performance — чтобы понять причины.
Чем отличаются лабораторные тесты от данных реальных пользователей и что важнее?
Лаборатория (Lighthouse/WebPageTest) полезна, чтобы понять почему медленно: блокирующие ресурсы, тяжёлые файлы, длинные задачи JS.
Полевые данные (CrUX/RUM/аналитика) отвечают на вопрос стало ли лучше у людей: слабые устройства, нестабильная сеть, реальный микс страниц.
Практика: правки находите в лаборатории, а подтверждение эффекта смотрите по полю (или хотя бы по повторным лабораторным прогонам в одинаковых условиях).
С чего начать оптимизацию, если времени мало и нужен быстрый эффект?
Почти всегда самый быстрый выигрыш дают изображения, особенно на первом экране:
- Перевод фото в WebP/AVIF.
- Правильный размер (не отдавать 4000px вместо 800px).
- srcset/sizes для разных экранов.
loading="lazy"только ниже первого экрана.
Начните с 10–20 самых тяжёлых картинок на популярных страницах — эффект обычно виден сразу.
Как ускорить hero-картинку (первый экран), чтобы улучшить LCP?
Hero-изображение часто и есть LCP-элемент, поэтому:
- Не ставьте для него
loading="lazy". - Сожмите файл и отдавайте правильное разрешение.
- По возможности используйте WebP/AVIF.
- Можно поднять приоритет:
fetchpriority="high".
После правки перепроверьте LCP на той же странице и в тех же условиях теста.
Что делать со шрифтами, если текст появляется поздно или «прыгает»?
Частые «быстрые» шаги:
- Оставьте меньше начертаний (обычно 2–3 вместо 6–10).
- Используйте WOFF2.
- Сделайте subset под нужные символы (особенно важно для кириллицы).
- Добавьте
font-display: swap;, чтобы текст появлялся сразу. preload— только для 1–2 критичных шрифтов.
Цель: быстрее показать текст и уменьшить скачки при подгрузке (CLS).
Почему сайт «визуально загрузился», но клики тормозят (плохой INP)?
Проверьте два слоя:
- Загрузка: подключайте свои скрипты с
defer(часто лучший вариант), аasync— только если нет зависимостей и не важен порядок. - Выполнение: ищите «длинные задачи» в DevTools Performance и уменьшайте работу на старте.
Быстрые действия:
- Уберите/отложите скрипты, не влияющие на первый экран.
- Разделите бандл (code splitting), чтобы не грузить «всё на всех страницах».
- Пересмотрите сторонние виджеты (чат, A/B, пиксели) — они часто главные виновники плохого INP.
Как уменьшить TTFB и понять, что тормозит на бэкенде?
Самые частые причины:
- Долгая сборка HTML на сервере (логика/шаблоны/внешние сервисы).
- Медленная база (тяжёлые запросы, нет индексов, слишком много запросов).
- Нет кэша — всё пересчитывается на каждый визит.
Что обычно помогает быстро:
- Кэш страницы/фрагментов для публичных страниц.
- Кэш результатов запросов (например, Redis).
- Уменьшение числа запросов и объёма возвращаемых данных.
Если после этого TTFB всё равно высокий и есть 5xx/нагрузка — возможно, пора усиливать сервер или менять хостинг.
Как настроить кэширование и когда нужен CDN?
Базовая схема для статики:
- Для файлов с хэшем в имени (
app.4f3a1c.js) ставьте:Cache-Control: public, max-age=31536000, immutable
- Для файлов без versioning — короткий
max-age, иначе будут «залипать» старые версии.
CDN имеет смысл, если аудитория географически распределена или есть пики: отдавайте через CDN изображения, CSS/JS, шрифты, загрузки.
Проверка:
- DevTools → Network → Headers:
Cache-Control,ETag/Last-Modified, признаки CDN (Age, статус кэша). - Или командой:
curl -I /path/to/asset.js.