HTMLImageElement: decoding ããããã£
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2020å¹´1æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
decoding 㯠HTMLImageElement ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ããããã£ã§ãç»åãã©ã®ããã«ãã³ã¼ããããã®ãã³ãããã©ã¦ã¶ã¼ã«æä¾ãã¾ããå
·ä½çã«ã¯ãä»ã®ã³ã³ãã³ãã表示ããåã«ç»åããã³ã¼ããããã®ãå¾
ã¤ã¹ããã©ããã§ãã
å¤
ãã³ã¼ããã³ãã表ãæååã§ãã使ç¨å¯è½ãªå¤ã¯ä»¥ä¸ã®éãã§ãã
"sync"-
ç»åãä»ã®ã³ã³ãã³ãã¨åæãã¦ãã³ã¼ãããã¢ãããã¯ã«è¡¨ç¤ºãã¾ãã
"async"-
ç»åãéåæã«ãã³ã¼ããããã®å¦çãå®å ¨ã«å®äºããåã«ä»ã«ãã³ã³ãã³ããã¬ã³ããªã³ã°ã§ããããã«ãã¾ãã
"auto"-
ãã³ã¼ãã¢ã¼ãã«å¯¾ããåªå é ä½ããªããã¨ã示ãã¾ãããã©ã¦ã¶ã¼ãæé©ãªãã®ã決å®ãã¾ãããããæ¢å®å¤ã§ããããã©ã¦ã¶ã¼ã«ãã£ã¦æ¢å®å¤ãç°ãªãã¾ãã
- Chromium ã¯æ¢å®ã§
"sync"ã§ãã - Firefox ã¯æ¢å®ã§
"async"ã§ãã - Safari ã¯æ¢å®ã§ãããä¸é¨ã®ç¶æ³ãé¤ãã¦
"sync"ã§ãã
- Chromium ã¯æ¢å®ã§
使ç¨ä¸ã®æ³¨æ
decoding ããããã£ã¯ãã©ã¦ã¶ã¼ã«ãç»åã®ãã³ã¼ããä»ã®ã¿ã¹ã¯ã¨ãã£ããã«åä¸ã®æ®µéã§è¡ãã¹ãã ("sync")ãå®å
¨ã«å®äºããåã«ä»ã®ã³ã³ãã³ããã¬ã³ããªã³ã°ãããã¹ãã ("async") ã®ãã³ããæä¾ãã¾ããå®éã«ã¯ããã® 2 ã¤ã®å¤ã®éããèªèããã®ã¯é£ãããã¨ãå¤ããéããããå ´åã«ã¯ãããè¯ãæ¹æ³ããããã¨ãå¤ãã§ãã
ãã¥ã¼ãã¼ãå
ã®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);
// `sync` ã使ç¨ãããã¨ã§ãä»ã®ã³ã³ãã³ãã確å®ã«ç»åãæ´æ°ãããã¨ãã§ãã¾ãã
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 > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
HTMLImageElement.decode()ã¡ã½ãã<img>è¦ç´ ã®decoding屿§- What does the image decoding attribute actually do? (tunetheweb.com, 2023)