加載模式

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.預加載 

預加載是一種瀏覽器機制,使用瀏覽器空閒時間預先加載/下載用戶接下來可能會訪問的頁面或者資源 放在緩存中,用戶訪問時直接從緩存中提存

-----------------目前瞭解的就這些,待補充

相關文章
相關標籤/搜索