HTMLImageElement: свойство decoding
Базовая линия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Свойство decoding интерфейса HTMLImageElement предоставляет подсказку браузеру о том, как он должен декодировать изображение. Более конкретно, должен ли он ожидать декодирования изображения перед представлением других обновлений содержимого или нет.
Значение
Строка, представляющая подсказку декодирования. Возможные значения:
"sync"-
Декодировать изображение синхронно для атомарного представления вместе с другим содержимым.
"async"-
Декодировать изображение асинхронно и позволить отображаться другому содержимому перед завершением этого процесса.
"auto"-
Нет предпочтения режима декодирования; браузер сам решает, что лучше для пользователя. Это значение по умолчанию, но разные браузеры имеют разные значения по умолчанию:
- Chromium по умолчанию
"sync". - Firefox по умолчанию
"async". - Safari по умолчанию
"sync"за исключением небольшого числа случаев.
- Chromium по умолчанию
Примечания по использованию
Свойство decoding предоставляет браузеру подсказку о том, должен ли он выполнять декодирование изображения вместе с другими задачами в одном шаге ("sync"), или позволить отобразить другое содержимое перед завершением этого процесса ("async"). На практике различия между этими двумя значениями часто трудно заметить, и там, где есть различия, часто есть лучший способ.
Для изображений, вставленных в DOM внутри области просмотра, "async" может привести к вспышкам нестилизованного содержимого, в то время как "sync" может привести к небольшому количеству задержек. Использование метода HTMLImageElement.decode() обычно является лучшим способом достижения атомарного отображения без задержки другого содержимого.
Для изображений, вставленных в DOM за пределами области просмотра, современные браузеры обычно декодируют их перед прокруткой в область просмотра, и заметной разницы при использовании любого из этих значений не будет.
Примеры
В приведенном ниже примере на странице, скорее всего, отобразится пустое изображение, пока изображение загружается. Установка decoding не предотвратит это.
const img = new Image(); img.decoding = "sync"; img.src = "img/logo.png"; document.body.appendChild(img);
Вставка изображения после загрузки может сделать свойство decoding более актуальным:
async function loadImage(url, elem) {
return new Promise((resolve, reject) => {
elem.onload = () => resolve(elem);
elem.onerror = reject;
elem.src = url;
});
}
const img = new Image();
await loadImage("img/logo.png", img);
// Using `sync` can ensure other content is only updated with the image
img.decoding = "sync";
document.body.appendChild(img);
const p = document.createElement("p");
p.textContent = "Image is fully loaded!";
document.body.appendChild(p);
Однако лучшим решением является использование метода HTMLImageElement.decode() для решения этой проблемы. Он предоставляет способ асинхронного декодирования изображения, откладывая вставку в DOM до полной загрузки и декодирования, тем самым избегая проблемы с пустым изображением, упомянутой выше. Это особенно полезно, если вы динамически меняете существующее изображение на новое, а также предотвращает задержку ненужных отрисовок вне этого кода, в то время как изображение декодируется.
Использование img.decoding = "async" может помочь избежать задержки отображения другого содержимого при длительном декодировании:
const img = new Image(); img.decoding = "async"; img.src = "img/logo.png"; document.body.appendChild(img);
Спецификации
| Спецификация |
|---|
| HTML # dom-img-decoding |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
decoding |
65 | 79 | 63 | 52 | 11.1 | 65 | 63 | 47 | 11.3 | 9.0 | 65 |
См. также
- Метод
HTMLImageElement.decode() - Элемент
<img>атрибутdecoding - Что на самом деле делает атрибут декодирования изображения? на tunetheweb.com (2023)
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decoding