這篇文章給大家介紹怎么在JavaScript中實現同步、異步、延遲加載,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創(chuàng)新互聯公司-專業(yè)網站定制、快速模板網站建設、高性價比江永網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式江永網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋江永地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
一:同步加載
我們平時使用的最多的一種方式。
同步模式,又稱阻塞模式,會阻止瀏覽器的后續(xù)處理,停止后續(xù)的解析,只有當當前加載完成,才能進行下一步操作。所以默認同步執(zhí)行才是安全的。但這樣如果js中有輸出document內容、修改dom、重定向等行為,就會造成頁面堵塞。所以一般建議把
HTML5新屬性:async和defer屬性
defer屬性:IE4.0就出現。defer屬聲明腳本中將不會有document.write和dom修改。瀏覽器會并行下載其他有defer屬性的script。而不會阻塞頁面后續(xù)處理。注:所有的defer腳本必須保證按順序執(zhí)行的。
async屬性:HTML5新屬性。腳本將在下載后盡快執(zhí)行,作用同defer,但是不能保證腳本按順序執(zhí)行。他們將在onload事件之前完成。
Firefox 3.6、Opera 10.5、IE 9和最新的Chrome和Safari都支持async屬性??梢酝瑫r使用async和defer,這樣IE 4之后的所有IE都支持異步加載。
沒有async屬性,script將立即獲取(下載)并執(zhí)行,期間阻塞了瀏覽器的后續(xù)處理。如果有async屬性,那么script將被異步下載并執(zhí)行,同時瀏覽器繼續(xù)后續(xù)的處理。
總結: 對于支持HTML5的瀏覽器,實現JS的異步加載只需要在script元素中加上async屬性,為了兼容老版本的IE還需加上defer屬性;對于不支持HTML5的瀏覽器(IE可以用defer實現),可以采用以上幾種方法實現。原理基本上都是向DOM中寫入script或者通過eval函數執(zhí)行JS代碼,你可以把它放在匿名函數中執(zhí)行,也可以在onload中執(zhí)行,也可以通過XHR注入實現,也可以創(chuàng)建一個iframe元素,然后在iframe中執(zhí)行插入JS代碼。
三:延遲加載
有些JS代碼在某些情況在需要使用,并不是頁面初始化的時候就要用到。延遲加載就是為了解決這個問題。將JS切分成許多模塊,頁面初始化時只加載需要立即執(zhí)行的JS,然后其它JS的加載延遲到第一次需要用到的時候再加載。類似圖片的延遲加載。
JS的加載分為兩個部分:下載和執(zhí)行。異步加載只是解決了下載的問題,但是代碼在下載完成后就會立即執(zhí)行,在執(zhí)行過程中瀏覽器處于阻塞狀態(tài),響應不了任何需求。
解決思路:為了解決JS延遲加載的問題,可以利用異步加載緩存起來,但不立即執(zhí)行,需要的時候在執(zhí)行。如何進行緩存呢?將JS內容作為Image或者Object對象加載緩存起來,所以不會立即執(zhí)行,然后在第一次需要的時候在執(zhí)行。
1:模擬較長的下載時間:
利用thread讓其sleep一段時間在執(zhí)行下載操作。
2:模擬較長的JS代碼執(zhí)行時間
var start = Number(new Date()); while(start + 5000 > Number(new Date())){//執(zhí)行JS}
1、能夠嵌入動態(tài)文本于HTML頁面。2、對瀏覽器事件做出響應。3、讀寫HTML元素。4、在數據被提交到服務器之前驗證數據。5、檢測訪客的瀏覽器信息。6、控制cookies,包括創(chuàng)建和修改等。7、基于Node.js技術進行服務器端編程。
關于怎么在JavaScript中實現同步、異步、延遲加載就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。