1.同步加載javascript
默認的是同步加載,又稱阻塞加載,加載的時候會阻止瀏覽器的後續處理,中止後續文件的解析和執行,如圖像的渲染等等。採用同步加載是由於加載的Js文件中有對DOM的操做,重定向,輸出DOM等行爲,此時同步加載時安全的。把js文件放在body標籤結束以前,是Js在頁面最後加載,就是爲了儘可能減小頁面阻塞,優先顯示頁面結構。css
2.異步加載html
異步加載是非阻塞加載,瀏覽器在加載Js的同時,還會進行後續頁面的處理。經過查詢資料,大概整理了異步加載有如下幾種實現方式。html5
(1)script標籤的async屬性java
<script src="" async></script>jquery
async屬性表示後續文檔的加載和渲染與js腳本的加載和執行是並行的,可是async只適用於外部腳本(有src屬性是使用),是html5中的新屬性ajax
(2)script標籤的defer屬性瀏覽器
<script src="" defer></script>緩存
defer屬性表示加載文檔的過程和js腳本的加載時並行執行的,可是js腳本的執行是在文檔全部元素解析完成以後,defer規定的是js腳本執行的異步,只有IE瀏覽器支持安全
(3)動態建立script標籤插入DOM結構
<script> (function(){ var s = document.createElement('script'); s.type = ''; s.src = "http://code.jquery.com/jquery-1.7.2.min.js"; var tmp = document.getElementsByTagName('script')[0]; tmp.parentNode.insertBefore(s, tmp); })(); </script>
(4)ajax請求:經過XMLHttpRequest來獲取js,而後建立一個script元素插入DOM,ajax請求成功後設置script.text爲請求成功返回的responseText。
var getXmlHttp=function(){ var obj; if(window.XMLHttpRequest){ obj=new XMLHttpRequest(); }else{ obj=new ActiveXObject("Microsoft.XMLHTTP"); } return obj; } var xmlHttp=getXmlHttp(); //採用Http請求get方式;open()方法的第三個參數表示採用異步(true)仍是同步(false)處理 xmlHttp.open('GET','http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js'.true); xmlHttp.send(); xmlHttp.onreadystatechange=function(){ if(xmlHttp.readyState==4 && xmlHttp.status==200){ var script=document.createElement("script"); script.text=xmlHttp.responseText; document.getElementsByTagName("head")[0].appendChild(script); } }
3.延遲加載
延遲加載是將js切分紅許多模塊,頁面初始化的時候只加載須要當即執行的Js,而後其餘的延遲到第一次須要使用的時候再加載,相似於圖片的延遲加載
4.預加載
預加載是一種瀏覽器機制,使用瀏覽器空閒時間預先加載/下載用戶接下來可能會訪問的頁面或者資源 放在緩存中,用戶訪問時直接從緩存中提存
-----------------目前瞭解的就這些,待補充