使用AngularJS構建大型Web應用

xiniubook發表於2013-10-08

AngularJS是由Google建立的一種JS框架,使用它可以擴充套件應用程式中的HTML詞彙,從而在web應用程式中使用HTML宣告動態內容。在該團隊工作的軟體工程師近日撰寫了一篇blog,分享瞭如何使用AngularJS構建大型Web應用的經驗。這些經驗對於使用其他JS框架構建大型應用的開發者也極具借鑑意義。

AngularJS的官方網站上給出了這個框架的基本使用方法,如:

  • 如何引入AugularJS,從而讓你的web應用使用該框架
  • 如何新增控制元件,並對其進行資料繫結
  • 如何進行表單驗證
  • 如何與伺服器通訊
  • 如何建立可重用的元件
  • 如何對元件進行本地化
  • 如何讓應用可嵌入、可注入和可測試
  • 另外,網站上還給出了一系列教程,跟隨這些內容,我們可以從深入淺出地逐漸對AngularJS的各種特性和用法有很好的瞭解,進而很好地開始使用這一框架。

但是,正如Brian Ford所說,官方文件中並沒有告訴開發者,當應用逐漸增長,其中包含上萬甚至幾十萬行程式碼的時候,應該如何組織和管理它,而他的blog正是對這些內容以及最佳實踐的總結。

這篇blog特別關注的是大型應用程式,作者首先給出的建議是,儘量不要讓應用變得太巨大。而應該編寫小型、功能專注的、模組化的部分,然後逐漸把它們組合起來,變得越來越大,從而構成你的應用。

接下來,Brian Ford首先講述瞭如何組織應用的結構,然後對效能、測試、工具、伺服器和構建過程做了簡要的總結。

在應用的組織結構方面,Brian Ford針對各個方面給出如下建議:

目錄:建議在根目錄中只放置index.html一個檔案,然後根據需要建立scripts、styles、views等目錄,在scripts目錄下,首先會存放app.js檔案,然後在之下又可以建立多個子目錄,如:controllers、directives、filters、services、vendor等,在其中分門別類地存放不同的內容。並且,隨著你為應用建立更多內容,也許會增加更多子目錄來存放各種檔案。

檔案:每個檔案中應該只有一件事物,這件事物可能會是控制元件、指令、過濾器或者服務等等。這會生成比較小但更專注的檔案。也有利於更好地進行測試。

模組:首先在app.js中定義和配置所有模組,如:

angular.module('yourAppName', ['yourAppDep']);
angular.module('yourAppDep');

然後在模組中定義控制元件、服務等,如:

angular.module('yourAppDep').controller('MyCtrl', function () {
      // ...
});

依賴關係:一般來說,服務、控制元件、指令等應該擁有儘可能少的依賴關係,這是非常好的軟體開發實踐,會有助於測試。API應該分層。控制元件尤其不能綜合多種不同級別的抽象。

指令:對指令使用app專用的字首,這有助於避免與第三方的元件重名。例如下面的程式碼中就用“btla”作為字首:

angular.module('yourAppDep').directive('btlaControlPanel', function () {
     // ...
});

服務:你可以使用下面的方式宣告服務:

angular.module('yourAppDep').service('MyCtrl', function () {
     // ...
});

模型:AngularJS作為JavaScript框架,其獨到之處就在於讓你可以完全掌控模型層。這是AngularJS的強大之處,因為應用程式的核心是你的資料,而各種應用之間的資料又有很大區別。所以Brian Ford強烈建議要仔細考慮使用和中資料,以及將會如何儲存資料。

控制器:建議控制器以“Ctrl”開頭,如:

angular.module('yourAppDep').controller('MyCtrl', function () {
     // ...
});

除了上述內容,Brian Ford還在文章中針對效能、測試等方面給出了各種建議:

在效能方面,AngularJS應用一般會非常非常快。大多數應用不需要做任何特殊的最佳化,因此,除非你發現嚴重的效能問題,否則就應該把時間花在其他方面來改善應用。

對於大型專案來說,測試非常重要。它讓你可以自信地進行重構,而這對於保持大型專案程式碼整潔非常重要。大型應用應該既擁有單元測試,也要擁有端到端(end-to-end)測試。單元測試有助於定位問題,而端到端的測試能夠確保整個應用像期望的那樣工作。每個控制器、服務、過濾器和指令都應該擁有一系列單元測試。而應用的每個特性都應該擁有端到端的測試。

在工具方面,首先推薦使用Yeoman,從而獲得最佳實踐和很好的專案結構,另外還有AngularJS Batarang,它對於除錯和找到效能瓶頸會很有效。

在伺服器方面,你可以使用任何想要的伺服器和AngularJS協作。它只是客戶端的程式庫。我的推薦和喜歡的設定是使用Node.js加nginx。我使用nginx存放靜態檔案,使用Node.js建立RESTful的API和嵌入的(socketed)應用。對於雲提供商,我曾經成功使用過Nodejitsu 和Linode。前者會讓你更容易地部署程式,你不需要關心伺服器的環境。如果你需要對伺服器環境有更多控制,那麼Linode會讓你從底層控制虛擬機器。Linode還提供了很好的API,可以用來管理虛擬機器。

構建過程方面,我認為Angular還需要做更多改進,我在2013年最大的目標就是要對此有所貢獻。我已經發布了ngmin,希望這個工具可以最終解決為生產環境最小化AngularJS應用的問題。

……

最後,Brian Ford做出結論:AngularJS是一種非常適合編寫大型應用的JS框架。你可以直接拿來使用,它很快,並且會對組織應用的結構很有幫助。

你是否構建過大型的Web應用,是否也曾經使用過AngularJS框架,歡迎大家分享和討論。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29194811/viewspace-773887/,如需轉載,請註明出處,否則將追究法律責任。

相關文章