JS延遲加載的幾種方式小結(jié)
一般有以下幾種方式:
1. defer 屬性
HTML 4.01 為 <script>
標(biāo)簽定義了 defer
屬性。
用途:表明腳本在執(zhí)行時(shí)不會(huì)影響頁(yè)面的構(gòu)造。也就是說(shuō),腳本會(huì)被延遲到整個(gè)頁(yè)面都解析完畢之后再執(zhí)行。
在<script>
元素中設(shè)置 defer
屬性,等于告訴瀏覽器立即下載,但延遲執(zhí)行。
<!DOCTYPE html> <html> <head> <script src="test1.js" defer="defer"></script> <script src="test2.js" defer="defer"></script> </head> <body> <!-- 這里放內(nèi)容 --> </body> </html>
說(shuō)明:雖然<script> 元素放在了<head>元素中,但包含的腳本將延遲瀏覽器遇到</html>標(biāo)簽后再執(zhí)行。
HTML5規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行。在現(xiàn)實(shí)當(dāng)中,延遲腳本并不一定會(huì)按照順序執(zhí)行。
defer屬性只適用于外部腳本文件。支持 HTML5 的實(shí)現(xiàn)會(huì)忽略嵌入腳本設(shè)置的 defer屬性。
2. async 屬性
HTML5 為 <script>
標(biāo)簽定義了 async
屬性。與defer
屬性類似,都用于改變處理腳本的行為。同樣,只適用于外部腳本文件。
目的:不讓頁(yè)面等待腳本下載和執(zhí)行,從而異步加載頁(yè)面其他內(nèi)容。
異步腳本一定會(huì)在頁(yè)面 load 事件前執(zhí)行。
不能保證腳本會(huì)按順序執(zhí)行。
<!DOCTYPE html> <html> <head> <script src="test1.js" async></script> <script src="test2.js" async></script> </head> <body> <!-- 這里放內(nèi)容 --> </body> </html>
async和defer一樣,都不會(huì)阻塞其他資源下載,所以不會(huì)影響頁(yè)面的加載。
缺點(diǎn):不能控制加載的順序
3.動(dòng)態(tài)創(chuàng)建DOM方式
//這些代碼應(yīng)被放置在</body>標(biāo)簽前(接近HTML文件底部) <script type="text/javascript"> function downloadJSAtOnload() { varelement = document.createElement("script"); element.src = "defer.js"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load",downloadJSAtOnload, false); else if (window.attachEvent) window.attachEvent("onload",downloadJSAtOnload); else window.onload =downloadJSAtOnload; </script>
4.使用jQuery的getScript()方法
$.getScript("outer.js",function(){//回調(diào)函數(shù),成功獲取文件后執(zhí)行的函數(shù) console.log("腳本加載完成") });
5.使用setTimeout延遲方法
setTimeout(function() { // 執(zhí)行延遲加載的代碼或加載資源 }, 2000); // 在 2000 毫秒(2 秒)后執(zhí)行
6.讓JS最后加載
把js外部引入的文件放到頁(yè)面底部,來(lái)讓js最后引入,從而加快頁(yè)面加載速度
到此這篇關(guān)于JS延遲加載的幾種方式小結(jié)的文章就介紹到這了,更多相關(guān)JS延遲加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JQuery+DIV自定義滾動(dòng)條樣式的具體實(shí)現(xiàn)
用DIV和DIV自身的滾動(dòng)條相互控制內(nèi)容的滾動(dòng),DIV自身的滾動(dòng)條樣式可以用DIV層覆蓋,重寫滾動(dòng)條樣式2013-06-06js實(shí)現(xiàn)水平滾動(dòng)菜單導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)水平滾動(dòng)菜單導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07javascript實(shí)現(xiàn)的簡(jiǎn)單計(jì)時(shí)器
計(jì)時(shí)器提供了一 個(gè)可以將代碼片段異步延時(shí)執(zhí)行的能力,javascript生來(lái)是單線程的(在一定時(shí)間范圍內(nèi)僅一部分js代碼能運(yùn)行),計(jì)時(shí)器為我們提供了一種避開(kāi)這種 限制的方法,從而開(kāi)辟了另一條執(zhí)行代碼的蹊徑。2015-07-07fiv.js實(shí)現(xiàn)flv文件blob流實(shí)時(shí)播放的項(xiàng)目實(shí)踐
本文主要介紹了fiv.js實(shí)現(xiàn)flv文件blob流實(shí)時(shí)播放的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Add a Table to a Word Document
Add a Table to a Word Document...2007-06-06Javascript異步表單提交,圖片上傳,兼容異步模擬ajax技術(shù)
使用Javascript異步表單提交,圖片上傳,兼容異步模擬ajax技術(shù),需要的朋友可以參考下。2010-05-05JS 添加網(wǎng)頁(yè)桌面快捷方式的代碼詳細(xì)整理
如何添加桌面快捷?很多網(wǎng)友都有這個(gè)疑問(wèn);JS 點(diǎn)擊添加網(wǎng)頁(yè)桌面快捷方式的代碼,需要的朋友可以參考下2012-12-12