標籤:獨立 主程 塊代碼 www content 解耦 衝突 知乎 根據
requirejs主要是為了模組化開發,這樣帶來的好處不言而喻。但是分成多個js檔案增加了請求數,那麼就要用到合并壓縮。合并壓縮了原來的許多獨立的js模組,那requirejs又是怎麼衝壓縮的檔案中找到各個獨立的模組進行載入的呢,感覺兩者有點衝突,這個問題想了很久也假想了很多可能。在知乎上找到了一個回答,好像有那麼點意思。
這個問題設計到多個概念詞彙:
1:模組化開發;模組化開發無非是為瞭解耦和代碼重用;期間的優勢你如果不能理解說明你還沒達到那個水平;
2:requirejs;requirejs在模組化開發中作為落地方案之一的技術架構,主要功能是按需載入相依模組;所有的載入器無非是實現幾個功能:(1:解析運行環境,解析主程式入口;(2:解析模組路徑;載入模組代碼並執行回調業務;所有類型模組載入器基本都會執行以上業務(amd,cmd,kmc……);在瀏覽器環境下的模組代碼的載入跟在node環境下的模組代碼載入的解析會有一些差異;
3:代碼合并:在web前端靜態檔案上線之前必做的一個最佳化手段:減輕代碼檔案的體積,減少http請求;
減輕代碼體積的手段就是壓縮代碼(俗稱ugly),在node環境下有很多類似的工具庫可以用;
減少http請求的手段一般就是代碼合并;如將a和b的代碼放到一個js檔案裡面去(css同理)(俗稱combo);
在執行amd標準時,一個js檔案只允許一個模組的存在,故在減少http請求層面,這是相斥的,但amd和cmd標準都有一個具名模組的定義方式,這個時候是允許一個js檔案存在多個模組代碼的;
你所不能理解的應該是r.js(requirejs的打包工具);它的工作其實就是解讀出根據你的配置環境的目錄結構下的代碼存放目錄結構,然後把標準的代碼結構轉換成具名模組的代碼結構,如果你執行了合并,則把依賴的模組的代碼合并到制定的一個檔案中;
連結 http://www.zhihu.com/question/34007485
關於requirejs和grunt壓縮合并是否矛盾