Повільна сторінка часто повільна не через рендер, а через водоспад завантажень: компонент рендериться - лише тоді дізнається, що потрібен шрифт, скрипт чи дані - запитує - чекає. React 19 додав API, щоб компонент міг оголосити ресурс заздалегідь.
Функції з react-dom:
import { preload, preinit, preconnect, prefetchDNS } from 'react-dom';
function ProductPage({ product }) {
preconnect('https://cdn.example.com'); // відкрити з'єднання
preload(product.heroImage, { as: 'image', fetchPriority: 'high' }); // завантажити, не виконувати
preinit('https://maps.example.com/sdk.js', { as: 'script' }); // завантажити й виконати
preload('/fonts/Inter.woff2', { as: 'font', type: 'font/woff2', crossOrigin: 'anonymous' });
return <Gallery images={product.images} />;
}
prefetchDNS- лише розв'язати домен;preconnect- встановити з'єднання (DNS + TLS);preload- завантажити ресурс (зображення, шрифт, стиль, скрипт), щоб він був у кеші, коли знадобиться;preinit- завантажити й застосувати скрипт чи таблицю стилів;preloadModule/preinitModule- те саме для ES-модулів.
Як це працює: виклики можна робити прямо під час рендеру чи в обробниках подій. При серверному рендері React виводить відповідні <link rel="preload"> у <head> якомога раніше в потоці HTML, а повторні виклики для того самого ресурсу дедуплікуються.
Метадані й стилі прямо в компонентах:
function Article({ post }) {
return (
<article>
<title>{post.title}</title>
<meta name="description" content={post.excerpt} />
<link rel="stylesheet" href="/css/article.css" precedence="default" />
...
</article>
);
}
React 19 піднімає <title>, <meta>, <link> у <head> документа. Таблиці стилів з precedence завантажуються до показу вмісту, що від них залежить (без «миготіння» нестилізованого вмісту), і вставляються в правильному порядку.
Практичні застосування:
- зображення першого екрана (LCP) -
preloadз високим пріоритетом; - попереднє завантаження при наведенні:
onMouseEnter={() => preload(nextPageImage, { as: 'image' })}; - сторонні SDK (карти, оплата) -
preconnectзаздалегідь,preinitлише на сторінках, де потрібні.
Обережно: зайвий preload конкурує за пропускну здатність з дійсно критичними ресурсами. Попередньо завантажувати варто те, що точно знадобиться найближчим часом.
Докладніше в документації: API попереднього завантаження ресурсів