Настройка прелоадинга ресурсов (preload, prefetch, preconnect) для сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка прелоадинга ресурсов (preload, prefetch, preconnect) для сайта
Средняя
~1 рабочий день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка preload, prefetch и preconnect

Resource Hints позволяют браузеру начать загрузку ресурсов заранее — до того как они будут обнаружены парсером. Правильное использование сокращает LCP и FCP на 200–800 мс.

Три директивы и их назначение

Директива Когда Что делает
preconnect Как можно раньше DNS + TCP + TLS к домену
preload Текущая страница Загрузить ресурс с высоким приоритетом
prefetch Следующая страница Загрузить в фоне с низким приоритетом

preconnect — устранение connection overhead

<head>
    <!-- Критичные сторонние домены — устанавливаем соединение заранее -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link rel="preconnect" href="https://cdn.example.ru" crossorigin>

    <!-- API сервер если он на другом домене -->
    <link rel="preconnect" href="https://api.example.ru">

    <!-- dns-prefetch: только DNS, без TCP (для менее критичных) -->
    <link rel="dns-prefetch" href="https://analytics.google.com">
    <link rel="dns-prefetch" href="https://mc.yandex.ru">
</head>

crossorigin нужен для ресурсов с CORS (шрифты, JSON API, изображения с другого домена).

preload — приоритетная загрузка ресурсов текущей страницы

<head>
    <!-- LCP-изображение — самый важный preload -->
    <link rel="preload" as="image"
          href="/images/hero.webp"
          imagesrcset="/images/hero-640.webp 640w, /images/hero-1280.webp 1280w"
          imagesizes="100vw">

    <!-- Кастомный шрифт -->
    <link rel="preload" as="font" type="font/woff2"
          href="/fonts/inter-regular.woff2" crossorigin>

    <!-- Критичный JS-модуль (не defer/async) -->
    <link rel="preload" as="script" href="/js/checkout.js">

    <!-- CSS (если не в <head> напрямую) -->
    <link rel="preload" as="style" href="/css/above-fold.css"
          onload="this.onload=null;this.rel='stylesheet'">
</head>

Типы ресурсов для as: image, script, style, font, fetch, document, track, audio, video.

prefetch — предзагрузка следующей страницы

<!-- На странице корзины — prefetch страницы оформления заказа -->
<link rel="prefetch" href="/checkout">
<link rel="prefetch" as="script" href="/js/checkout.chunk.js">
<link rel="prefetch" as="style"  href="/css/checkout.css">

Браузер загружает prefetch-ресурсы в фоне с низким приоритетом — только когда основные ресурсы уже загружены.

Динамический prefetch на hover

// Prefetch при наведении на ссылку (React)
function usePrefetch() {
    const prefetched = useRef(new Set<string>());

    return useCallback((url: string) => {
        if (prefetched.current.has(url)) return;
        prefetched.current.add(url);

        const link = document.createElement('link');
        link.rel = 'prefetch';
        link.href = url;
        document.head.appendChild(link);
    }, []);
}

function NavLink({ to, children }: { to: string; children: React.ReactNode }) {
    const prefetch = usePrefetch();

    return (
        <Link
            to={to}
            onMouseEnter={() => prefetch(to)}
            onFocus={() => prefetch(to)}
        >
            {children}
        </Link>
    );
}

Speculation Rules API (Chrome 108+)

Более современная альтернатива prefetch — позволяет браузеру полностью пре-рендерить страницу:

<script type="speculationrules">
{
    "prerender": [
        {
            "where": {
                "and": [
                    { "href_matches": "/products/*" },
                    { "not": { "href_matches": "/api/*" } }
                ]
            },
            "eagerness": "moderate"
        }
    ],
    "prefetch": [
        {
            "urls": ["/checkout", "/cart"],
            "eagerness": "eager"
        }
    ]
}
</script>

Значения eagerness: immediate (сразу), eager (при hover), moderate (при взаимодействии), conservative (по усмотрению браузера).

Early Hints (103)

Сервер отправляет preload заголовки до формирования основного ответа — пока PHP/Laravel генерирует HTML, браузер уже начинает загружать ресурсы:

# Nginx с модулем http_v2_module
location / {
    http2_push /css/app.css;
    http2_push /js/app.js;
    http2_push /fonts/inter.woff2;
    # или через 103 Early Hints
}
// Laravel: отправить 103 Early Hints
public function show(): Response
{
    // Отправляем hints до рендеринга
    header('Link: </css/app.css>; rel=preload; as=style, </js/app.js>; rel=preload; as=script', false, 103);

    return response()->view('pages.product');
}

Ошибки при использовании preload

  • Preload ресурса который не используется на странице — браузер предупредит в консоли
  • Preload шрифта без crossorigin — загрузится дважды
  • Слишком много preload — конкурируют за пропускную способность, снижают приоритет LCP-изображения
  • Preload + lazy loading на одном изображении — взаимоисключают друг друга

Срок настройки: 4–8 часов для аудита и расстановки правильных hints.