解決JS文件頁面加載時的阻塞

關於頁面加載時的時間消費,許多書中都作出了介紹,也提出了不少種方法。本文章就詳細介紹XHR注入。javascript

概述:JS分拆的方法css

1.XHR注入:就是用ajax異步請求同域包含腳本的文件,而後將返回的字符串轉化爲腳本使用,該方法不會形成頁面渲染和onload事件的阻塞,由於是異步處理,推薦使用。html

2.iframe注入:加載一個iframe框架,經過使用iframe框架中的腳原本避免src方式加載腳本的阻塞,可是iframe元素開銷較大,不推薦。java

3.DOM注入:就是建立script元素,經過制定該元素的src並放入DOM樹中,根據該語句書寫的文字不一樣,會形成渲染或onload事件的阻塞。ajax

4. document.write方法:在JS腳本中使用document.write('<script>XXX</script>');這種方法簡單粗暴,可是它仍然會形成阻塞,所改變的只是何時阻塞。app

詳細介紹:
第一步:創造ajax函數:1創建XMLHTTPRequest或ActiveXObject對象 2.ajax對象的open方法 3.ajax對象的send方法 4.改寫onreadystatechange事件,判斷status(200)和readyState(4)屬性值,對請求數據類型操做。框架

第二步:用ajax函數請求一個JS文件。異步

第三步:兩個分支:第一種:拿來主義,eval(請求返回字符串);執行了JS中的函數,達到目的。函數

                         第二種:建立script對象,利用該對象的text屬性賦值 返回字符串 方式,達到目的。url

看代碼:

實例JS文件:建立一個100X100的黑色div,並加載到指定元素中。

function test() {
    oDiv = document.createElement('div');
    oDiv.style['width'] = '100px';
    oDiv.style['height'] = '100px';
    oDiv.style['background'] = 'black';
    document.getElementById('header').appendChild(oDiv);
}
test();

頁面使用該JS文件

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/css">
     *{ margin:0; padding:0;}
    </style>
</head>
<body>
 <div id="header" style=" height:150px; background-color:Red;"></div>
 <div id="init">
  <script type="text/javascript">
      //Ajax獲取字符串
function Ajax(Method,url,funcSucc,funcFalse) {
    if (XMLHttpRequest)
        var oAjax = new XMLHttpRequest();
    else {
        var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
    }
    oAjax.open(Method, url, true);
    oAjax.send();
    oAjax.onreadystatechange = function () {
        if (oAjax.readyState == 4) {
            if (oAjax.status == 200) {
                var str = oAjax.responseText;
                funcSucc(str);
            }
            else {
                funcFalse();
            }
        }
    };

      Ajax('GET', 'javascript/load.js', function (str) {
          eval(str);
 //        var oScript = document.createElement('script');
//          oScript.text = str;
//          document.getElementsByTagName('head')[0].appendChild(oScript);

      }, function () {
          alert('失敗');
      });
      
     </script>
 </div>
</body>
</html>
相關文章
相關標籤/搜索