[Web] 被遺忘的知識點 – JavaScript載入管理最佳實務

來源:互聯網
上載者:User

前言

 

最近項目有一個需求,如下: HTML頁面一般來說可以由CSS、JavaScript、Dom(通常為Div)以及一些JS初始化頁面函數組成,現在需要將一個頁面拆分為CSS、JavaScript、Dom和JS init函數四部分,通過從服務端分別擷取這四部分,經過拼湊後,渲染出完整的頁面。這裡面CSS、DOM節點比較好處理,但是JavaScript的載入以及JS init的執行,就要考慮到很多問題。如果有誰遇到類似的問題,可以討論下,畢竟想要將這個做成一個完善的架構會遇到很多問題。這篇文章,我將介紹一些載入管理JavaScript的一些實踐,希望對你有所協助。

原生的JavaScript實現

 此處為不希望藉助架構的朋友們,提供一種方案。

function loadScript(url, callback) {  var script = document.createElement("script")  script.type = "text/javascript";  if (script.readyState) { //IE    script.onreadystatechange = function () {      if (script.readyState == "loaded" || script.readyState == "complete") {        script.onreadystatechange = null;        callback();      }    };  } else { //Others    script.onload = function () {      callback();    };  }  script.src = url;  document.getElementsByTagName("head")[0].appendChild(script);}

LAB實現

 

$LAB.setOptions({  AlwaysPreserveOrder: true}).script("script1.js") // script1, script2, script3, and script4 *DO* depend on each .script("script2.js") // other, and will execute serially in order after all 4 have have.script("script3.js") // loaded in parallel.script("script4.js").wait(function () {  initFunction();});
$LAB.setOptions({  AllowDuplicates: true}).script("script1.js").wait().script("script2.js").script("script3.js").wait().script("script4.js").wait(function () {  initFunction();});

RequireJS實現

 

(function (require) {  var urlArgs = ''; // used for browser cache  if (CNBlogs.isProduct) {    urlArgs = 'v=1';  } else {    urlArgs = "dev=" + (new Date()).getTime();  }  require.config({    baseUrl: '/scripts', //By default load any module IDs from baseUrl    urlArgs: urlArgs,    paths: {      'hello1': 'hello1.min',      'hello2': '/document/11111-11100-010101/latest?' // append ? to avoid .js extension    },    shim: {      'hello3': ['hello1', 'hello2'],      'hello4': ['hello3', 'bootstrap']    },    waitSeconds: 200  });})(require);require(['jqueryui', 'hello4'], function () {  initFunction();});

參考文檔

 LABJS官網文檔: http://labjs.com/documentation.php

RequireJS官網文檔: http://requirejs.org/docs/api.html

後續

 LABJS和RequireJS沒有絕對的好差,只看你使用哪一種比較方便而已,這篇文章中很多問題沒有細細說明,如果有疑問可以聯絡,相互探討。

QQ: 1321518080

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.