Предзагрузка ресурсов: link rel="preload", "prefetch", "preconnect"

🚀 Ускоряем загрузку страницы: магия предзагрузки

Веб-страницы — как слоеный пирог: чем больше ресурсов (CSS, JS, шрифты), тем дольше загрузка. Но есть три волшебных инструмента, которые помогут браузеру «подготовиться» заранее:

<link rel="preload">
<link rel="prefetch">
<link rel="preconnect">

Разберем каждый как настоящие профессионалы!


🔥 preload: приоритетная загрузка критичных ресурсов

Когда использовать: Для ресурсов, которые нужны прямо сейчас (например, основные стили или скрипты выше-the-fold).

<!-- Грузим главный CSS с максимальным приоритетом -->
<link rel="preload" href="styles.css" as="style">

<!-- Предзагружаем кастомный шрифт -->
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>

🔍 Ключевые моменты:

  • as — обязательный атрибут (указывает тип: script, style, font, image и др.)
  • Для шрифтов всегда добавляйте crossorigin
  • Браузер грузит ресурс немедленно, даже если он ещё не встретился в HTML

🕵️‍♂️ prefetch: загрузка «на будущее»

Когда использовать: Для ресурсов, которые понадобятся позже (например, JS-модуль для следующей страницы).

<!-- Подгружаем скрипт для страницы корзины, пока пользователь читает каталог -->
<link rel="prefetch" href="cart.js" as="script">

🌐 Как это работает: - Браузер загружает ресурс в фоновом режиме, когда простаивает - Идеально для постраничной навигации в SPA - Приоритет ниже, чем у preload


🌉 preconnect: установка раннего соединения

Когда использовать: Для внешних доменов (CDN, API, Google Fonts).

<!-- Заранее подключаемся к серверу Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">

Эффект: - Браузер устанавливает TCP-соединение и выполняет TLS-рукопожатие заранее - Экономит 100–500 мс для каждого внешнего ресурса - Особенно полезно для CDN и аналитических сервисов


🧪 Реальный пример: оптимизация лендинга

Допустим, у нас сайт с:

  1. Основным CSS (styles.css)
  2. Кастомным шрифтом (font.woff2)
  3. Видео с Vimeo
  4. Формой с API (api.example.com)

Оптимальная стратегия:

<!-- Критичные ресурсы -->
<link rel="preload" href="styles.css" as="style">
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>

<!-- Внешние подключения -->
<link rel="preconnect" href="https://vimeo.com">
<link rel="preconnect" href="https://api.example.com">

<!-- Ресурсы для будущих страниц -->
<link rel="prefetch" href="contact-form.js" as="script">

⚠️ Важные нюансы

  1. Не злоупотребляйте preload — каждый такой ресурс «крадет»带宽 у других
  2. Порядок имеет значение — размещайте теги в <head> как можно раньше
  3. Проверяйте в DevTools → вкладка «Network» покажет Priority ресурсов
  4. Для динамических путей можно использовать JavaScript:
const link = document.createElement('link');
link.rel = 'preload';
link.as = 'script';
link.href = 'dynamic-bundle.js';
document.head.appendChild(link);

📊 Как выбрать между preload, prefetch, preconnect?

Сводная таблица:

Техника Приоритет Когда использовать Влияние на производительность
preload Высокий Критичные ресурсы ⭐⭐⭐⭐⭐
prefetch Низкий Ресурсы для будущего ⭐⭐
preconnect Средний Внешние домены ⭐⭐⭐⭐

🛠️ Практическое задание

  1. Откройте свой проект и найдите 3 ресурса, которые можно оптимизировать
  2. Добавьте соответствующие теги preload/prefetch/preconnect
  3. Проверьте результат в DevTools (разница в графе «Waterfall»)
Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео