如何實現(xiàn)JavaScript文件的同步和異步加載-創(chuàng)新互聯(lián)

這篇文章主要介紹了如何實現(xiàn)JavaScript文件的同步和異步加載,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)專注于咸豐企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站建設(shè)。咸豐網(wǎng)站建設(shè)公司,為咸豐等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

同步加載

可在html文件里以<script>標簽插入,這是初學時最基本的方式。

準備兩個js文件如下:

calc1.js

console.log('calc1 loading begin')

function add(...args) {
  return args.reduce((currentTotal, i) => currentTotal + i, 0);
}
console.log('calc1 loading end')

calc2.js

console.log('calc2 loading begin')

console.log(add(1,2,3))

console.log('calc2 loading end')

calc2.js 是依賴calc1.js的。

html文件如下:

<body>

  <script src="calc1.js">
  </script>
  
  <script src="calc2.js">
  </script>
</body>

這種方式下,文件加載是同步的。即calc1.js加載完成后,才加載calc2.js,所以保證了calc2.js總能正確地調(diào)用calc1里的add函數(shù)。在Chrome里的調(diào)試結(jié)果如下:

如何實現(xiàn)JavaScript文件的同步和異步加載

但同步加載的缺點也明顯,如果有多個文件的時候,全部加載時間會很長,而且阻塞用戶界面響應(yīng)。

通過Script Element異步加載

異步加載的優(yōu)點是,能夠同時加載多個js文件,而且由于是異步,不會阻塞用戶界面,用戶體驗好。當然缺點是,不能保證有依賴關(guān)系的文件的加載順序。

html 代碼

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script type="text/javascript">
    var script1 = document.createElement('script');
    script1.src='calc1.js';
    script1.type='text/javascript';

    var script2 = document.createElement('script');
    script2.src='calc2.js';
    script2.type='text/javascript';

    document.getElementsByTagName('head')[0].appendChild(script1).appendChild(script2);
  </script>
</head>

在Chrome里的調(diào)試結(jié)果有時候能正確的輸出如下:

如何實現(xiàn)JavaScript文件的同步和異步加載

但有時候由于clac1.js沒有被先加載,calc2.js執(zhí)行時會報錯。

如何實現(xiàn)JavaScript文件的同步和異步加載

那么我們就得需要解決加載順序問題,保證calc1.js先加載。

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script type="text/javascript">
    function loadScript(file, callbackFn) {
      var script = document.createElement('script');
      script.src= file;
      script.type='text/javascript';
      // 監(jiān)聽onload時間,當前js文件加載完成后,再加載下一個
      script.onload = callbackFn;
      document.getElementsByTagName('head')[0].appendChild(script)
    }
    
    loadScript('calc1.js', function () {
      loadScript('calc2.js');
    } );

  </script>
</head>

這樣就能永遠輸出正確結(jié)果了。

通過 AJAX 加載JS文件
 

 <script>
    function loadScript(file, callbackFn) {
      var xhr = new XMLHttpRequest();
      xhr.open('get', file, true);
      // for IE
      if (xhr.onreadystatechange) {
        xhr.onreadystatechange = function () {
          console.log(xhr.readyState, xhr.status);
          if (xhr.readyState == 4) {
            if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
              insertScriptText(xhr.responseText);
              if (callbackFn) {
                callbackFn();
              }
            }
          }
        }
      } else {
        xhr.onload = function () {
          insertScriptText(xhr.responseText);
          if (callbackFn) {
            callbackFn();
          }
        }
      }
      xhr.send(null);
    }

    function insertScriptText(scriptText) {
      var script = document.createElement('script');
      script.type = 'text/javascript';
      script.text = scriptText;
      document.body.appendChild(script);
    }

    loadScript('calc1.js', function () {
      loadScript('calc2.js');
    });

  </script>

也能正確的輸出結(jié)果。

如何實現(xiàn)JavaScript文件的同步和異步加載

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何實現(xiàn)JavaScript文件的同步和異步加載”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)成都做網(wǎng)站,關(guān)注創(chuàng)新互聯(lián)成都做網(wǎng)站行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享名稱:如何實現(xiàn)JavaScript文件的同步和異步加載-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article40/dhshho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊微信公眾號、微信小程序、手機網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)