新聞中心
一:同步加載
白沙黎族ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
我們平時(shí)使用的最多的一種方式。
同步模式,又稱阻塞模式,會(huì)阻止瀏覽器的后續(xù)處理,停止后續(xù)的解析,只有當(dāng)當(dāng)前加載完成,才能進(jìn)行下一步操作。所以默認(rèn)同步執(zhí)行才是安全的。但這樣如果js中有輸出document內(nèi)容、修改dom、重定向等行為,就會(huì)造成頁(yè)面堵塞。所以一般建議把
HTML5新屬性:async和defer屬性
defer屬性:IE4.0就出現(xiàn)。defer屬聲明腳本中將不會(huì)有document.write和dom修改。瀏覽器會(huì)并行下載其他有defer屬性的script。而不會(huì)阻塞頁(yè)面后續(xù)處理。注:所有的defer腳本必須保證按順序執(zhí)行的。
async屬性:Html5新屬性。腳本將在下載后盡快執(zhí)行,作用同defer,但是不能保證腳本按順序執(zhí)行。他們將在onload事件之前完成。
Firefox 3.6、Opera 10.5、IE 9和最新的Chrome和Safari都支持async屬性??梢酝瑫r(shí)使用async和defer,這樣IE 4之后的所有IE都支持異步加載。
沒有async屬性,script將立即獲?。ㄏ螺d)并執(zhí)行,期間阻塞了瀏覽器的后續(xù)處理。如果有async屬性,那么script將被異步下載并執(zhí)行,同時(shí)瀏覽器繼續(xù)后續(xù)的處理。
總結(jié): 對(duì)于支持HTML5的瀏覽器,實(shí)現(xiàn)JS的異步加載只需要在script元素中加上async屬性,為了兼容老版本的IE還需加上defer屬性;對(duì)于不支持Html5的瀏覽器(IE可以用defer實(shí)現(xiàn)),可以采用以上幾種方法實(shí)現(xiàn)。原理基本上都是向DOM中寫入script或者通過(guò)eval函數(shù)執(zhí)行JS代碼,你可以把它放在匿名函數(shù)中執(zhí)行,也可以在onload中執(zhí)行,也可以通過(guò)XHR注入實(shí)現(xiàn),也可以創(chuàng)建一個(gè)iframe元素,然后在iframe中執(zhí)行插入JS代碼。
三:延遲加載
有些JS代碼在某些情況在需要使用,并不是頁(yè)面初始化的時(shí)候就要用到。延遲加載就是為了解決這個(gè)問題。將JS切分成許多模塊,頁(yè)面初始化時(shí)只加載需要立即執(zhí)行的JS,然后其它JS的加載延遲到第一次需要用到的時(shí)候再加載。類似圖片的延遲加載。
JS的加載分為兩個(gè)部分:下載和執(zhí)行。異步加載只是解決了下載的問題,但是代碼在下載完成后就會(huì)立即執(zhí)行,在執(zhí)行過(guò)程中瀏覽器處于阻塞狀態(tài),響應(yīng)不了任何需求。
解決思路:為了解決JS延遲加載的問題,可以利用異步加載緩存起來(lái),但不立即執(zhí)行,需要的時(shí)候在執(zhí)行。如何進(jìn)行緩存呢?將JS內(nèi)容作為Image或者Object對(duì)象加載緩存起來(lái),所以不會(huì)立即執(zhí)行,然后在第一次需要的時(shí)候在執(zhí)行。
1:模擬較長(zhǎng)的下載時(shí)間:
利用thread讓其sleep一段時(shí)間在執(zhí)行下載操作。
2:模擬較長(zhǎng)的JS代碼執(zhí)行時(shí)間
var start = Number(new Date()); while(start + 5000 > Number(new Date())){//執(zhí)行JS}
這段代碼將使JS執(zhí)行5秒才完成!
JS延遲加載機(jī)制(LazyLoad):簡(jiǎn)單來(lái)說(shuō),就是在瀏覽器滾動(dòng)到某個(gè)位置在觸發(fā)相關(guān)的函數(shù),實(shí)現(xiàn)頁(yè)面元素的加載或者某些動(dòng)作的執(zhí)行。如何實(shí)現(xiàn)瀏覽器滾動(dòng)位置的檢測(cè)呢?可以通過(guò)一個(gè)定時(shí)器來(lái)實(shí)現(xiàn),通過(guò)比較某一時(shí)刻頁(yè)面目標(biāo)節(jié)點(diǎn)位置和瀏覽器滾動(dòng)條高度來(lái)判斷是否需要執(zhí)行函數(shù)。
以上所述是小編給大家介紹的詳解JS異步加載的三種方式,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
文章標(biāo)題:詳解JS異步加載的三種方式
當(dāng)前地址:http://www.dlmjj.cn/article/jcighp.html