| title | preload |
|---|
Фреймворки на основе React часто обрабатывают загрузку ресурсов за вас, поэтому вам может не понадобиться вызывать этот API самостоятельно. Обратитесь к документации вашего фреймворка для получения подробной информации.
preload позволяет заблаговременно загрузить ресурс, такой как таблица стилей, шрифт или внешний скрипт, который вы ожидаете использовать.
preload("https://example.com/font.woff2", {as: "font"});Чтобы предварительно загрузить ресурс, вызовите функцию preload из react-dom.
import { preload } from 'react-dom';
function AppRoot() {
preload("https://example.com/font.woff2", {as: "font"});
// ...
}Функция preload предоставляет браузеру подсказку о том, что он должен начать загрузку указанного ресурса, что может сэкономить время.
href: строка. URL ресурса, который вы хотите загрузить.options: объект. Содержит следующие свойства:as: обязательная строка. Тип ресурса. Его возможные значения включаютaudio,document,embed,fetch,font,image,object,script,style,track,video,worker.crossOrigin: строка. Политика CORS, которую следует использовать. Возможные значения:anonymousиuse-credentials. Это обязательное поле, еслиasустановлено в"fetch".referrerPolicy: строка. Заголовок Referrer, который будет отправлен при запросе. Возможные значения:no-referrer-when-downgrade(по умолчанию),no-referrer,origin,origin-when-cross-originиunsafe-url.integrity: строка. Криптографический хэш ресурса для проверки его подлинности.type: строка. MIME-тип ресурса.nonce: строка. Криптографический nonce для разрешения ресурса при использовании строгой политики безопасности контента (Content Security Policy).fetchPriority: строка. Предлагает относительный приоритет для загрузки ресурса. Возможные значения:auto(по умолчанию),highиlow.imageSrcSet: строка. Используется только сas: "image". Задает набор источников изображения.imageSizes: строка. Используется только сas: "image". Задает размеры изображения.
preload ничего не возвращает.
- Несколько эквивалентных вызовов
preloadимеют тот же эффект, что и один вызов. Вызовыpreloadсчитаются эквивалентными согласно следующим правилам:- Два вызова эквивалентны, если у них одинаковый
href, за исключением: - Если
asустановлено вimage, два вызова эквивалентны, если у них одинаковыеhref,imageSrcSetиimageSizes.
- Два вызова эквивалентны, если у них одинаковый
- В браузере вы можете вызывать
preloadв любой ситуации: во время рендеринга компонента, в эффекте, в обработчике событий и так далее. - При рендеринге на стороне сервера или при рендеринге серверных компонентов
preloadимеет эффект только в том случае, если вы вызываете его во время рендеринга компонента или в асинхронном контексте, возникшем в результате рендеринга компонента. Любые другие вызовы будут проигнорированы.
Вызывайте preload при рендеринге компонента, если вы знаете, что он или его дочерние компоненты будут использовать определенный ресурс.
import { preload } from 'react-dom';
function AppRoot() {
preload("https://example.com/script.js", {as: "script"});
return ...;
}Если вы хотите, чтобы браузер немедленно начал выполнение скрипта (а не просто загрузил его), вместо этого используйте preinit. Если вы хотите загрузить модуль ESM, используйте preloadModule.
import { preload } from 'react-dom';
function AppRoot() {
preload("https://example.com/style.css", {as: "style"});
return ...;
}Если вы хотите, чтобы таблица стилей была немедленно вставлена в документ (что означает, что браузер начнет ее парсить немедленно, а не просто загружать), вместо этого используйте preinit.
import { preload } from 'react-dom';
function AppRoot() {
preload("https://example.com/style.css", {as: "style"});
preload("https://example.com/font.woff2", {as: "font"});
return ...;
}Если вы предварительно загружаете таблицу стилей, разумно также предварительно загрузить любые шрифты, на которые ссылается таблица стилей. Таким образом, браузер сможет начать загрузку шрифта до того, как он загрузит и разберет таблицу стилей.
import { preload } from 'react-dom';
function AppRoot() {
preload("/banner.png", {
as: "image",
imageSrcSet: "/banner512.png 512w, /banner1024.png 1024w",
imageSizes: "(max-width: 512px) 512px, 1024px",
});
return ...;
}При предварительной загрузке изображения опции imageSrcSet и imageSizes помогают браузеру загрузить изображение правильного размера для размера экрана.
Вызывайте preload в обработчике событий перед переходом на страницу или в состояние, где потребуются внешние ресурсы. Это позволит начать процесс раньше, чем если бы вы вызвали его во время рендеринга новой страницы или состояния.
import { preload } from 'react-dom';
function CallToAction() {
const onClick = () => {
preload("https://example.com/wizardStyles.css", {as: "style"});
startWizard();
}
return (
<button onClick={onClick}>Start Wizard</button>
);
}