使用AngularJS构建大型Web应用

AngularJS是由Google建立的一种JS框架,使用它能够扩展应用程序中的HTML词汇,从而在web应用程序中使用HTML声明动态内容。在该团队工做的软件工程师Brian Ford近日撰写了一篇blog,分享了如何使用AngularJS构建大型Web应用的经验。这些经验对于使用其余JS框架构建大型应用的开发者也极具借鉴意义。 html

AngularJS的官方网站上给出了这个框架的基本使用方法,如: node

  • 如何引入AugularJS,从而让你的web应用使用该框架
  • 如何添加控件,并对其进行数据绑定
  • 如何进行表单验证
  • 如何与服务器通讯
  • 如何建立可重用的组件
  • 如何对组件进行本地化
  • 如何让应用可嵌入、可注入和可测试
  • 另外,网站上还给出了一系列教程,跟随这些内容,咱们能够从深刻浅出地逐渐对AngularJS的各类特性和用法有很好的了解,进而很好地开始使用这一框架。

可是,正如Brian Ford所说,官方文档中并无告诉开发者,当应用逐渐增加,其中包含上万甚至几十万行代码的时候,应该如何组织和管理它,而他的blog正是对这些内容以及最佳实践的总结。 nginx

这篇blog特别关注的是大型应用程序,做者首先给出的建议是,尽可能不要让应用变得太巨大。而应该编写小型、功能专一的、模块化的部分,而后逐渐把它们组合起来,变得愈来愈大,从而构成你的应用。 web

接下来,Brian Ford首先讲述了如何组织应用的结构,而后对性能、测试、工具、服务器和构建过程作了简要的总结。 服务器

在应用的组织结构方面,Brian Ford针对各个方面给出以下建议: 架构

目录:建议在根目录中只放置index.html一个文件,而后根据须要建立scripts、styles、views等目录,在scripts目录下,首先会存放app.js文件,而后在之下又能够建立多个子目录,如:controllers、directives、filters、services、vendor等,在其中分门别类地存放不一样的内容。而且,随着你为应用建立更多内容,也许会增长更多子目录来存放各类文件。 app

文件:每一个文件中应该只有一件事物,这件事物可能会是控件、指令、过滤器或者服务等等。这会生成比较小但更专一的文件。也有利于更好地进行测试。 框架

模块:首先在app.js中定义和配置全部模块,如: socket

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框架,欢迎你们分享和讨论。

相关文章
相关标签/搜索