const myImage = document.querySelector("#my-image");
myImage.src = "selfie.jpg";
有人告訴我上面的代碼是異步的。它是異步的嗎?
我以為我只是在 myImage 物件上設定 src 屬性。我沒有使用回呼或承諾。這是一個簡單的2行代碼。所以我認為它是同步的。我錯過了什么嗎?
uj5u.com熱心網友回復:
這一切都取決于您所說的“.src 分配”是什么意思。
在HTMLImageElement.src這方面,IDL 屬性實際上非常復雜。
設定它會更新屬性值(同步),也會觸發“更新影像資料”演算法。在這個演算法中,會準備一個新的請求,但實際上只在下一個微任務時發送,以便讓腳本也改變srcset或crossorigin值,甚至src本身。
那么資源的獲取和影像的解碼都將是完全異步的。
所以是的,如果您將 DOM 視為一個 JS 物件,則該.src屬性是同步設定的,但這遺漏了該屬性的大部分要點。
uj5u.com熱心網友回復:
您的代碼是同步的,但執行很可能不是。
基本上瀏覽器必須執行 GET 請求才能呈現您的影像“selfie.jpg”。瀏覽器“決定”如何呈現它。
您可能需要參考 img 屬性“解碼”以獲得更多洞察力和 tweeking。
MDN 網路檔案說:
向瀏覽器提供影像解碼提示。允許值:
sync Decode the image synchronously, for atomic presentation with other content. async Decode the image asynchronously, to reduce delay in presenting other content. auto Default: no preference for the decoding mode. The browser decides what is best for the user.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/338444.html
標籤:javascript 异步 dom 事件循环
