Web技術基礎
在瀏覽器顯示第一個畫面之前的處理(關鍵轉譯路徑)中,若<head>中有不加屬性的 <script src="app.js">,HTML的解析就會在那裡停住。為這個元素加上defer屬性時的行為,下列何者正確?
- A下載一完成就停止HTML的解析並立即執行,多個指令碼的執行順序不保證
- B既不下載也不執行,直到使用者操作網頁時才第一次載入
- C與HTML的解析平行下載,在解析結束後,依文件中撰寫的順序執行
查看答案與解析
正確答案:C. 與HTML的解析平行下載,在解析結束後,依文件中撰寫的順序執行
瀏覽器解析HTML建立DOM、解析CSS建立CSSOM,合併兩者決定要繪製的內容,計算元素的位置與大小(版面配置)之後再繪製(paint)。不加屬性的script元素可能改寫DOM,因此在下載與執行結束前會停止HTML的解析。加上defer後,下載與解析平行進行,執行則在解析之後依文件中撰寫的順序進行。若為async,下載一完成就執行,因此順序不保證。
- A. 這是async屬性的行為。defer會在解析之後依撰寫的順序執行。
- B. 即使加上defer,指令碼也會立即下載,並且不等待使用者操作就執行。
- C. 正確。不停止解析而下載,在解析之後依撰寫的順序執行。