2014-07-23 48 views
3

我有一個懷疑,在我的角應用程序,我有這麼多的js文件,所以當我加載應用程序時,包含在索引中的所有.js文件.html文件好使用requirejs或咕嚕與concat/minification爲angularjs性能

<html> 
... 
<script src="scripts/controllers/loginController.js"></script> 
<script src="scripts/controllers/explainedController.js"></script> 
<script src="scripts/controllers/homeController.js"></script> 
<script src="scripts/controllers/menuController.js"></script> 
<script src="scripts/controllers/listController.js"></script> 
<script src="scripts/controllers/treeController.js"></script> 
<script src="scripts/controllers/jqueryController.js"></script 
.. 
</html> 

將被下載,然後該應用程序已準備就緒。那就好,到目前爲止,但由於性能原因我想如果我用咕嚕任務CONCAT和縮小使用

grunt-contrib-concat, grunt-contrib-uglify 

縮小後,所以我結束了只有一個文件將是一件好事。所以現在我的索引文件看起來像:

<html> 
... 
<!--script src="scripts/controllers/loginController.js"></script> 
     <script src="scripts/controllers/explainedController.js"></script> 
     <script src="scripts/controllers/homeController.js"></script> 
     <script src="scripts/controllers/menuController.js"></script> 
     <script src="scripts/controllers/listController.js"></script> 
     <script src="scripts/controllers/treeController.js"></script> 
     <script src="scripts/controllers/jqueryController.js"></script--> 
     <script src="scripts/production.min.js"></script> <!--Minified file --> 
... 
</html> 

通過這個,我減少了http調用只有一個。

如果這是一個很好的進步,那麼適應require.js會讓我獲得更好的進步/表現或http調用。我不這麼認爲。

總體來說,我的問題是: 對於一個角度應用的性能更好,是不是很好用咕嚕任務像縮小和壓縮還是很好用requirejs

回答

0

我個人很喜歡用這兩種。正如你已經注意到的,縮小對性能有好處,但我也喜歡使用require來爲我的代碼構造一個JS模塊,每個文件。這有助於我在開發過程中組織和瀏覽源代碼。

當我需要在我的角度服務使用一個模塊,我只是

var myModule = require('MyModule'); 

但如果在開發過程中它會變成我不需要用我的服務這個模塊了,我只是刪除上面的行和MyModule.js永遠不會加載除非其他一些模塊要求它。

RequireJS免除您關心加載.js文件的順序。如果將整個源代碼縮減爲一個文件,此問題也不適用,但出於調試目的,我通常在開發期間不使用縮小代碼。

在最近的一個項目中,我有31個js文件存儲在6個文件夾+第三方庫中。如果沒有requirejs或其他AMD工具,管理加載這將是一個真正的痛苦。

如果您使用Karma測試您的Angular項目,那麼您需要支持開箱即用的支持。

最後,需要JS提供了一個縮小/優化工具:

http://requirejs.org/docs/optimization.html

它能夠識別所有需要在你的代碼並編譯成一個文件,爲您加載。

2

恕我直言,requirejs的主要好處是依賴管理,即哪個文件應該在別人之前執行。在生產中,我們通常最終將r.js進行concat/minify轉換爲單個或幾個文件,因此異步加載功能並沒有那麼有用。

Angular.js有自己的依賴注入(DI)系統,如果你能正確地把一切都入系統,你可以考慮到模塊聲明angular.module('app', ['blabla'])運行第一任意順序排列的腳本標記。因此,這部分解決了與requirejs相同的依賴關係管理問題。

這裏是我的建議

對於中小型Web應用程序,如果可能的話,堅持使用純腳本標記和使用一個構建系統,如咕嚕到CONCAT /運行如下的代碼像你已經做。另請參閱grunt-usemin項目。

對於一個大型的Web應用程序,這取決於有事情要考慮,如果requirejs是值得推行的項目努力:

  • 有一些舊的代碼庫,不能轉換並投入DI很容易。
  • 大多數開發人員不太願意以角度模式編寫所有的東西,而且他們已經熟悉requirejs。
  • 需要懶惰下載腳本,但$的script.js,Head.js也可以用來代替
  • 可能有很多,沒有人使用它了垃圾文件,但你不知道,如果這些文件可以完全刪除或不刪除,在這種情況下,requirejs可以幫助您。
  • 有可能是其他情況,你必須做一些研究和評估是否應該使用requirejs

希望這會有所幫助。