使用AngularJS構建大型Web應用

AngularJS是由Google創建的一種JS框架,使用它可以擴展應用程序中的HTML詞彙,從而在web應用程序中使用HTML聲明動態內容。在該團隊工作的軟件工程師Brian Ford近日撰寫了一篇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框架,歡迎大家分享和討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章