requirejs實現對動態combo的支援

來源:互聯網
上載者:User

combo是為了減少請求數, 但是全combo成一個不好, 最佳實務還是合理拆分成幾個檔案, 真實環境裡能減小載入總時間, 並在一定程度上提高
瀏覽器端緩衝的利用率;

現在seajs的例子裡都是用的config的preload來支援伺服器端combo, 但是有個問題:

 seajs要等preload數組裡所有項目都載入完, 才會開始處理具體的seajs.use調用, 比如:

seajs.config({
  preload: ['m1', 'm2+m3']

});


seajs.use(['m1'], function(m1) { /*位置1*/ });
seajs.use(['m2', 'm3'], function(m2, m3) {...});

必須等'm1.js', 'm2+m3.js'兩個檔案都載入完了, 才會開始執行/*位置1*/處的代碼.

萬一'm2+m3.js'要等比較久, 等於變相延遲了js的執行, 不懂有沒有好的解決方案.

在這個問題上require的path式id, 剛好能更平順的支援動態combo.對combo支援更好

combo.js

define('a',function(){   return {      name:'nick',   }});define('b',function(){   return {  sex:'man'   }});

 main.js

define(function(a){require.config({baseUrl: '',paths: {'a' : 'engine/combo','b' : 'engine/combo'}});    require(['a','b'],function(a,b){   alert(a.name+"|"+b.sex)})});

 ok

這樣 requirejs不會在發a.js和b.js兩個了,而是發送combo.js動態請求給server,當然,需要server支援combo的功能來把a.js和b.js壓縮成為上面的combo.js

但是這樣還有這麼一個問題,比如
有a.js b.js c.js三個模組
有兩個請求src='a.js+b.js' 和 src='a.js+c.js'
那麼這兩個請求裡面都會包含有a.js 模組,因為server的combo是不知道你已經請求過了a.js模組了,那麼,這也是個缺陷。至少浪費頻寬哇,也可能會覆蓋前面模組的已經更新的屬性
不知道requirejs是否有檢查模組是否已經存在的api,否則,只能在本地自己記錄一個已經請求過的模組的列表,然後每次請求的時候從列表裡面過濾

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.