国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解JS異步加載的三種方式

2024-05-06 15:10:11
字體:
來源:轉載
供稿:網友

一:同步加載

我們平時使用的最多的一種方式。

<script src="http://yourdomain.com/script.js"></script><script src="http://yourdomain.com/script.js"></script>

同步模式,又稱阻塞模式,會阻止瀏覽器的后續處理,停止后續的解析,只有當當前加載完成,才能進行下一步操作。所以默認同步執行才是安全的。但這樣如果js中有輸出document內容、修改dom、重定向等行為,就會造成頁面堵塞。所以一般建議把<script>標簽放在<body>結尾處,這樣盡可能減少頁面阻塞。

二:異步加載

異步加載又叫非阻塞加載,瀏覽器在下載執行js的同時,還會繼續進行后續頁面的處理。主要有三種方式。

方法一:也叫Script DOM Element

(function(){  var scriptEle = document.createElement("script");  scriptEle.type = "text/javasctipt";  scriptEle.async = true;  scriptEle.src = "http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js";  var x = document.getElementsByTagName("head")[0];  x.insertBefore(scriptEle, x.firstChild);  })();<async>屬性是HTML5中新增的異步支持。此方法被稱為Script DOM Element 方法。Google Analytics 和 Google+ Badge 都使用了這種異步加載代碼(function(){;  var ga = document.createElement('script');   ga.type = 'text/javascript';   ga.async = true;   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';   var s = document.getElementsByTagName('script')[0];   s.parentNode.insertBefore(ga, s); })();

但是這種加載方式執行完之前會阻止onload事件的觸發,而現在很多頁面的代碼都在onload時還執行額外的渲染工作,所以還是會阻塞部分頁面的初始化處理。

方法二:onload時的異步加載

(function(){ if(window.attachEvent){   window.attachEvent("load", asyncLoad);  }else{   window.addEventListener("load", asyncLoad);  }  var asyncLoad = function(){   var ga = document.createElement('script');     ga.type = 'text/javascript';     ga.async = true;     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';     var s = document.getElementsByTagName('script')[0];     s.parentNode.insertBefore(ga, s);  })();

這種方法只是把插入script的方法放在一個函數里面,然后放在window的onload方法里面執行,這樣就解決了阻塞onload事件觸發的問題。

注:DOMContentLoaded與load的區別。前者是在document已經解析完成,頁面中的dom元素可用,但是頁面中的圖片,視頻,音頻等資源未加載完,作用同jQuery中的ready事件;后者的區別在于頁面所有資源全部加載完畢。

方法三:其他方法

由于JavaScript的動態性,還有很多異步加載方法: XHR Injection、 XHR Eval、 Script In Iframe、 Script defer屬性、 document.write(script tag)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 上虞市| 达拉特旗| 长兴县| 神农架林区| 会泽县| 册亨县| 新营市| 滦南县| 大竹县| 府谷县| 三都| 尚义县| 彝良县| 巨野县| 休宁县| 玉田县| 长葛市| 芜湖县| 南京市| 邛崃市| 大悟县| 九寨沟县| 汝南县| 梁平县| 南皮县| 乐陵市| 礼泉县| 定日县| 大埔县| 铜梁县| 衢州市| 宜兰县| 阳江市| 辽阳县| 同德县| 涞水县| 屏东市| 正宁县| 玉屏| 海丰县| 随州市|