摘要:環境其它版本沒有測試,下列簡稱和分別延遲秒秒和立即,并會在控制臺里打印和測試代碼做測試步驟不為設定或時頁面會在所有加載和執行完后渲染輸出和設置為會等的秒延遲后,控制臺會立即輸出和等的秒后會輸出并觸發,最后觸發會等的秒延遲后,控制臺會立即
環境:
chrome31/firefox25/IE11(其它版本沒有測試),下列簡稱chrome/firefox/IE
http://127.0.0.1:8081/test1、http://127.0.0.1:8081/test2和http://127.0.0.1:8081/test3分別延遲5秒、3秒和立即,并會在控制臺里打印test1、test2和test3
測試代碼:HTML:
script async defer
nodejs做server:
var http = require("http"); http.createServer(function(req, res) { res.writeHead(200, { "Content-Type": "text/plain" }); if (req.url == "/test1") { setTimeout(function() { res.end("console.log("test1");"); }, 1000 * 5); } else if (req.url == "/test2") { setTimeout(function() { res.end("console.log("test2");"); }, 1000 * 3); } else { res.end("console.log("test3");"); } // res.end("Hello World "); }).listen(8081, "127.0.0.1"); console.log("Server running at http://127.0.0.1:8081/");測試步驟:
不為script設定defer或async時
頁面會在所有script加載和執行完后渲染 ,輸出test1、test2和test3,DOMContentLoaded,onload
設置defer
test1為defer ,chrome/IE會等test2的3秒延遲后,控制臺會立即輸出test2和test3,等test1的5秒后會輸出test1并觸發DOMContentLoaded,最后觸發onload;firefox會等test2的3秒延遲后,控制臺會立即輸出test2和test3并觸發DOMContentLoaded,等test1的5秒后會輸出test1,最后觸發onload;
test1和test2都為defer時,chrome/IE會立即輸出test3,盡管test2比test1先加載完成但是只有等到test1加載完成執行后才繼續執行,輸出為test1和test2并觸發DOMContentLoaded,最后觸發onload;firefox會立即輸出test3并觸發DOMContentLoaded,test2下載完后等test1下載完并執行后才執行,輸出test1和test2,最后觸發onload
設置async
test1為async ,等test2的3秒延遲后,會立即輸出test2和test3并觸發DOMContentLoaded,等test1的5秒后會打印test1,最后觸發onload
test1和test2都為async時 ,會立即輸出test3并觸發DOMContentLoaded,test2先加載完先打印test2,test1后加載完打印test1,最后觸發onload
結論:不設置async和defer時,頁面會等script下載執行完后繼續執行
設置defer時,會下載腳本,但是不會立即執行并且按照script順序觸發
設置async時,會下載腳本,但是不會立即執行并不一定按照script順序觸發
無論是否設置了defer或async,該script會在onload前執行
IE/chrome在設置defer時,與firefox不同,前者會等腳本都執行后才執行DOMContentLoaded,而后者會先于腳本執行
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77953.html
摘要:相關腳本會立即下載并執行。從上面兩個例子,可以充分了解到標簽的柱塞式執行。表示該標簽并不柱塞,也不同步執行。屬性帶有屬性的腳本,同樣會推遲腳本的執行,并且不會阻止文檔解析。同時,帶有的腳本彼此之間,能保證其執行順序。 原文: http://pij.robinqu.me/Browser_Scripting/Document_Loading/ScriptTag.html 源...
摘要:盡管腳本的下載過程中不會相互影響,但頁面仍然要等到所有代碼下載并完成執行才能繼續。 defer和asnyc(只對外部文件有效) defer 在頁面完成解析時執行代碼,這個屬性表明腳本在執行時不會影響頁面的構造,在元素中設置這個屬性相當于告訴瀏覽器立即下載但延遲執行 async 相對于頁面其他部分異步執行腳本,一般的script標簽都是會阻塞頁面執行的,沒有加上async屬性的標簽...
摘要:如下圖所示,外部樣式表是否會阻塞解析先不要看答案,可以自己思考和實驗一下通過如上圖所示,并沒有阻塞解析,因為時間線在之后。并且都支持事件回調處理,用于一些初始化工作。為了盡早地觸發事件,因為會延遲事件觸發。 singsong: 文章中 demo 猛戳這里吧 ??最新內容請以github上的為準?? 在講解之前,先看一個問題。如下圖所示,外部樣式表是否會阻塞 HTML 解析(先不要看答...
閱讀 2679·2023-04-25 20:28
閱讀 1849·2021-11-22 09:34
閱讀 3687·2021-09-26 10:20
閱讀 1834·2021-09-22 16:05
閱讀 3085·2021-09-09 09:32
閱讀 2502·2021-08-31 09:40
閱讀 2099·2019-08-30 13:56
閱讀 3320·2019-08-29 17:01