Браузер сам розставляє пріоритети завантаження — і в більшості сценаріїв справляється чудово. Але реальний продакшен вимагає більш тонкого керування. Коли на сторінці інтернет-магазину карусель товарів, браузер не знає, що перше зображення — LCP-елемент, і завантажує всі слайди з однаковим пріоритетом Low. У результаті LCP може зрости на 20–30% лише через невірний пріоритет. Або скрипт аналітики конкурує з критичним CSS, відкладаючи відмальовку контенту. Ми постійно стикаємося з такими ситуаціями, і у нас є перевірене рішення — Priority Hints.
Атрибут fetchpriority дає розробнику можливість явно вказати пріоритет завантаження: high, low або auto. На відміну від preload, який лише прискорює початок завантаження, fetchpriority дозволяє браузеру гнучко перерозподіляти пріоритети під час завантаження сторінки — це підвищує LCP на 15–20% порівняно з використанням лише preload (тобто в середньому в 2 рази ефективніше). Це особливо важливо для Core Web Vitals, де кожна мілісекунда LCP на рахунку.
Проблема з розстановкою пріоритетів браузером за замовчуванням
Згідно з документацією Chrome Developers, Хром використовує п'ять рівнів пріоритету: Highest, High, Medium, Low, Lowest. За замовчуванням:
- CSS у
<head>— Highest - Синхронні скрипти в
<head>— High - Зображення — Low (крім перших у viewport — Medium)
- Async/defer скрипти — Low
- Fetch API — High
- XHR — High
Проблема в тому, що браузер не завжди знає, яке саме зображення є LCP-елементом. Якщо в <head> є <link rel="preload"> для зображення — воно отримує High. Але це лише прискорює його скачування, не змінюючи пріоритет рендерингу.
| Ресурс | Без fetchpriority | З fetchpriority='high' |
|---|---|---|
| LCP-зображення у viewport | Medium | Highest |
| LCP-зображення поза viewport (карусель) | Low | High |
| Скрипт аналітики | Medium (якщо async) | Low |
Як fetchpriority прискорює LCP?
Атрибут fetchpriority приймає три значення: high, low, auto (за замовчуванням). Для LCP-елемента виставляємо high — і браузер одразу підвищує його пріоритет до Highest, випереджаючи інші ресурси.
<!-- Підвищуємо пріоритет LCP-зображення -->
<img src="/hero.webp" fetchpriority="high" alt="Hero зображення">
<!-- Знижуємо пріоритет декоративних зображень нижче fold -->
<img src="/decoration.webp" fetchpriority="low" alt="">
<!-- Знижуємо пріоритет некритичного скрипта -->
<script src="/analytics.js" defer fetchpriority="low"></script>
<!-- У preload-директиві -->
<link rel="preload" href="/hero.webp" as="image" fetchpriority="high">
<!-- У Fetch API -->
<script>
// Критичний запит даних для першого рендеру
data = await fetch('/api/initial-data', { priority: 'high' });
// Фонова синхронізація
sync = await fetch('/api/sync-status', { priority: 'low' });
</script>Деталі роботи атрибута: fetchpriority не перевизначає пріоритет автоматично, а є підказкою. Браузер аналізує поточне завантаження і може змінити пріоритет залежно від ситуації.
Як підвищити пріоритет LCP-зображення в каруселі?
Без підказок браузер не знає, що перше зображення каруселі — це LCP-елемент. Він завантажує всі зображення з однаковим пріоритетом Low. Рішення — вказати fetchpriority="high" для першого слайда та fetchpriority="low" для решти.
<div class="carousel">
<!-- Перший слайд — LCP, високий пріоритет -->
<img src="/slides/slide-1.webp" fetchpriority="high" loading="eager" alt="Слайд 1">
<!-- Інші слайди — низький пріоритет або lazy -->
<img src="/slides/slide-2.webp" fetchpriority="low" loading="lazy" alt="Слайд 2">
<img src="/slides/slide-3.webp" fetchpriority="low" loading="lazy" alt="Слайд 3">
</div> Коли варто знижувати пріоритет ресурсів?
Для некритичних скриптів і зображень, які не впливають на LCP, використовуємо low. Це звільняє канал завантаження для важливих елементів. Типові кандидати: скрипти аналітики, пікселі соцмереж, декоративні зображення, фонові API-запити.
Типовий сценарій: сторінка продукту з галереєю
<!-- Головне зображення — це LCP -->
<img src="/products/main-image.webp" fetchpriority="high" loading="eager" width="800" height="600" alt="Назва продукту">
<!-- Мініатюри — низький пріоритет -->
<div class="thumbnails">
<img src="/products/thumb-1.webp" fetchpriority="low" loading="lazy" alt="">
<img src="/products/thumb-2.webp" fetchpriority="low" loading="lazy" alt="">
<img src="/products/thumb-3.webp" fetchpriority="low" loading="lazy" alt="">
</div> Динамічне керування пріоритетом у React
У SPA LCP-елемент часто визначається динамічно. Ми використовуємо проп priority у компонентах:
function ProductGrid({ products }) {
return (
<div className="grid">
{products.map((product, index) => (
<ProductCard
key={product.id}
product={product}
imagePriority={index === 0 ? 'high' : 'low'}
imageLoading={index < 4 ? 'eager' : 'lazy'}
/>
))}
</div>
);
}У Next.js компонент <Image> з пропом priority автоматично додає fetchpriority="high" і preload.
Підтримка браузерами
| Браузер | Версія підтримки |
|---|---|
| Chrome | 101+ |
| Firefox | 125+ |
| Safari | 17.2+ |
| Edge | 101+ |
| Opera | 87+ |
Як ми впроваджуємо Priority Hints?
- Аудит: використовуємо Chrome DevTools і Performance API для виявлення ресурсів з невірним пріоритетом. У 80% випадків близько 30% ресурсів на типовому сайті завантажуються з неоптимальним пріоритетом.
- Аналіз LCP: визначаємо кандидата в LCP і перевіряємо його пріоритет.
- Розстановка
fetchpriority: для LCP-елементів — high, для декоративних і скриптів — low. - Тестування: порівнюємо водоспади завантаження до та після. Приріст конверсії після оптимізації LCP зазвичай становить 5-10%.
- Моніторинг: налаштовуємо вимірювання LCP у RUM.
Що входить у роботу
- Повний аудит пріоритетів завантаження зі звітом.
- Впровадження
fetchpriorityна HTML-сторінках і в компонентах (React, Vue, Angular). - Динамічне керування пріоритетами для SPA.
- Документація та чек-лист для підтримки.
- Гарантія покращення LCP щонайменше на 15% (за результатами тестів).
Ми — команда з понад п'ятирічним досвідом у веб-продуктивності. Реалізували більше 50 проєктів із прискорення сайтів. Замовте повний аудит — зв'яжіться з нами, і ми оцінимо ваш проєкт за два дні. Зв'яжіться з нами для консультації.
Зниження пріоритету сторонніх скриптів
Аналітика та пікселі не повинні конкурувати з критичними ресурсами:
<script src="https://www.google-analytics.com/analytics.js" defer fetchpriority="low"></script> Вимірювання ефекту
Перевіряємо через Chrome DevTools: вкладка Network → стовпець Priority. Програмно — через PerformanceResourceTiming: performance.getEntriesByType('resource').
Терміни
Аудит поточних пріоритетів і розстановка fetchpriority на ключових елементах — від 4 до 8 годин. Повноцінне впровадження з динамічним керуванням — від 1 до 2 робочих днів. Вартість розраховується індивідуально після аналізу вашого проєкту. Отримайте консультацію — ми підкажемо, які покращення дадуть максимальний ефект.







