實現(xiàn)高性能JavaScript之執(zhí)行與加載_基礎(chǔ)知識
來源:懂視網(wǎng)
責(zé)編:小采
時間:2020-11-27 20:50:25
實現(xiàn)高性能JavaScript之執(zhí)行與加載_基礎(chǔ)知識
實現(xiàn)高性能JavaScript之執(zhí)行與加載_基礎(chǔ)知識:瀏覽器在處理HTML頁面渲染和JavaScript腳本執(zhí)行的時候是單一進(jìn)程的,所以在當(dāng)瀏覽器在渲染HTML遇到了標(biāo)簽會先去執(zhí)行標(biāo)簽內(nèi)的代碼(如果是使用src屬性加載的外鏈文件,則先下載再執(zhí)行),在這個過程中,頁面渲染和交互都會被阻塞。 ...雖然會有阻塞,但還是有幾招可
導(dǎo)讀實現(xiàn)高性能JavaScript之執(zhí)行與加載_基礎(chǔ)知識:瀏覽器在處理HTML頁面渲染和JavaScript腳本執(zhí)行的時候是單一進(jìn)程的,所以在當(dāng)瀏覽器在渲染HTML遇到了標(biāo)簽會先去執(zhí)行標(biāo)簽內(nèi)的代碼(如果是使用src屬性加載的外鏈文件,則先下載再執(zhí)行),在這個過程中,頁面渲染和交互都會被阻塞。 ...雖然會有阻塞,但還是有幾招可

瀏覽器在處理HTML頁面渲染和JavaScript腳本執(zhí)行的時候是單一進(jìn)程的,所以在當(dāng)瀏覽器在渲染HTML遇到了
雖然頁面結(jié)構(gòu)一樣,但不一樣的是
打開defer.html依次看到是: 彈出"script"的alert框=>頁面渲染出文字=>彈出"defer"的alert框=>彈出"load"的alert框
打開async.html依次看到是: 彈出"script"的alert框=>彈出"async"的alert框=>頁面渲染出文字=>彈出"load"的alert框
3.2.使用動態(tài)創(chuàng)建的script標(biāo)簽來下載執(zhí)行JavaScript代碼
file.js在script元素添加到頁面時就啟動下載,使用這種方式的優(yōu)勢在于file.js的下載和執(zhí)行不會阻塞頁面其他進(jìn)程。
從demo上可以明顯的看出動態(tài)加載方式可以在alert框彈出之前先看到頁面上的文字,但是普通的方式只有在alert框彈出之后才可以看到頁面上的文字。
我們可以封裝一個跨瀏覽器的讀取script腳本并動態(tài)創(chuàng)建script標(biāo)簽的函數(shù):
這類動態(tài)加載腳本的方法兼容性好,也比較簡單,是一種常用的無阻塞解決方案。
3.3.使用XHR對象下載JavaScript代碼并注入頁面
另一種無阻塞加載腳本的方式是使用XMLHttpRequest(XHR)對象獲取腳本并注入頁面中。
這種技術(shù)會先創(chuàng)建一個XHR對象,然后用他下載JavaScript文件,最后通過常見動態(tài)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
實現(xiàn)高性能JavaScript之執(zhí)行與加載_基礎(chǔ)知識
實現(xiàn)高性能JavaScript之執(zhí)行與加載_基礎(chǔ)知識:瀏覽器在處理HTML頁面渲染和JavaScript腳本執(zhí)行的時候是單一進(jìn)程的,所以在當(dāng)瀏覽器在渲染HTML遇到了標(biāo)簽會先去執(zhí)行標(biāo)簽內(nèi)的代碼(如果是使用src屬性加載的外鏈文件,則先下載再執(zhí)行),在這個過程中,頁面渲染和交互都會被阻塞。 ...雖然會有阻塞,但還是有幾招可