Preload и preconnect
Браузер узнаёт о ресурсах постепенно — читает HTML сверху вниз и только наткнувшись на ссылку, идёт за файлом. Из-за этого важная картинка или шрифт могут начать грузиться позже, чем хотелось бы. Подсказки браузеру (resource hints) решают проблему: они говорят «вот это понадобится скоро, начни заранее». Разберём основные.
Зачем подсказывать браузеру
Представьте шрифт, который описан глубоко в CSS. Браузер доберётся до него не сразу: сначала скачает HTML, потом CSS, разберёт его — и только тогда поймёт, что нужен шрифт. А текст всё это время ждёт. Если заранее сказать «нам точно нужен этот шрифт» — браузер начнёт его тянуть сразу, и текст появится быстрее. Подсказки не загружают лишнего, они лишь меняют порядок и время начала загрузки важных вещей.
Основные подсказки
<link rel="preload" as="image" href="/hero.jpg">
Где это реально помогает
- Главная картинка экрана. Если ваш LCP — большое фото в шапке, его
preloadускоряет появление и улучшает метрику. - Ключевой шрифт. Preload основного шрифта убирает мерцание текста при загрузке — об этом подробнее в статье про веб-шрифты и скорость.
- Внешние сервисы. Preconnect к доменам аналитики, шрифтов, CDN экономит время на установку соединения.
Как добавить
Подсказки — это строчки <link> в начале страницы. На CMS их часто проставляют плагины оптимизации (например, автоматически добавляют preconnect к доменам внешних шрифтов и preload для LCP-картинки). Вручную добавляют, когда точно знаете критичный ресурс. После добавления стоит свериться с PageSpeed: он подсказывает, какие ресурсы стоит загрузить раньше.
preconnect или dns-prefetch
Эти две подсказки похожи, но отличаются глубиной подготовки. Когда браузер обращается к внешнему домену, он делает несколько шагов: узнаёт его IP (DNS), устанавливает соединение и согласует шифрование (для https). dns-prefetch выполняет заранее только первый шаг — определение IP; это легко и почти бесплатно, подходит для доменов, к которым вы, может быть, обратитесь. preconnect идёт дальше и заранее проделывает всю подготовку, включая соединение и TLS, — это дороже, поэтому его берегут для доменов, к которым точно и скоро обратятся (шрифты, ключевая аналитика). Практика: для критичного внешнего домена — preconnect, для «вероятных» — более лёгкий dns-prefetch. Не ставьте preconnect к десятку доменов: открытые впрок соединения тоже расходуют ресурсы.
fetchpriority: расставить приоритеты
Есть ещё одна, более свежая подсказка — атрибут fetchpriority. Он не запускает загрузку раньше, а меняет приоритет среди того, что и так грузится. fetchpriority="high" говорит «этот ресурс важнее остальных, дай ему канал в первую очередь» — его ставят главной картинке первого экрана (LCP), чтобы она опередила второстепенные изображения. fetchpriority="low" наоборот понижает приоритет неважного — например, картинок глубоко внизу страницы. В связке с preload это мощный дуэт: preload начинает грузить ключевой ресурс раньше, а fetchpriority high гарантирует, что он не уступит канал менее важным. Браузеры расставляют приоритеты и сами, но подсказка помогает в спорных случаях.
Частые ошибки
Подсказки легко применить неправильно, и тогда они либо не работают, либо вредят. Самая частая — preload без указания типа: атрибут as обязателен («as=image», «as=font», «as=style»), иначе браузер не поймёт, что и с каким приоритетом грузить, и может скачать ресурс дважды. Для шрифтов забывают crossorigin — без него предзагруженный шрифт не «совпадёт» с тем, что запросит CSS, и загрузится повторно. Ещё ошибка — preload ресурса, который на самом деле не нужен на первом экране: вы отнимаете канал у действительно важного. И перебор: чем больше «срочных» подсказок, тем меньше смысла в каждой. Правило прежнее — точечно и по делу.
Коротко
Подсказки браузеру (preload, preconnect, dns-prefetch, prefetch) меняют порядок загрузки в свою пользу: preconnect заранее устанавливает соединение с внешним доменом, preload раньше начинает грузить важный ресурс (LCP-картинку, ключевой шрифт), dns-prefetch заранее резолвит домен, prefetch подгружает ресурс для вероятного следующего шага. Главное правило — точечность: preload для одного-двух критичных ресурсов, иначе подсказки начнут мешать друг другу. Обычно их проставляют плагины оптимизации.