Spec-Zone.ru › Web APIs

HTMLImageElement: свойство decoding

Базовая линия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Свойство decoding интерфейса HTMLImageElement предоставляет подсказку браузеру о том, как он должен декодировать изображение. Более конкретно, должен ли он ожидать декодирования изображения перед представлением других обновлений содержимого или нет.

Значение

Строка, представляющая подсказку декодирования. Возможные значения:

"sync"

Декодировать изображение синхронно для атомарного представления вместе с другим содержимым.

"async"

Декодировать изображение асинхронно и позволить отображаться другому содержимому перед завершением этого процесса.

"auto"

Нет предпочтения режима декодирования; браузер сам решает, что лучше для пользователя. Это значение по умолчанию, но разные браузеры имеют разные значения по умолчанию:

  • Chromium по умолчанию "sync".
  • Firefox по умолчанию "async".
  • Safari по умолчанию "sync" за исключением небольшого числа случаев.

Примечания по использованию

Свойство 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API