写点什么

使用 AngularJS 构建大型 Web 应用

2013 年 2 月 06 日

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

2013 年 2 月 06 日 02:1246814
用户头像

发布了 340 篇内容, 共 114.3 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

如何找一碗正宗的热干面

zhoo299

美食

性能优化作业

qihuajun

性能测试与优化学习总结

qihuajun

性能优化(一)

olderwei

第七周学习总结

赵龙

架构师训练营 - 第七周 - 学习总结

stardust20

简约而不简单的分布式通信基石

架构师修行之路

分布式 socket udp TCP/IP 通信协议

架构师训练营Week7作业

Frank Zeng

架构师训练营 - 第七周 - 作业

韩挺

Docker网络学习第三篇-路由

Lazy

Docker Linux 网络

Docker基础修炼4--Docker仓库及相关命令

黑马腾云

Docker Linux 运维 容器技术 虚拟化

架构师0期07周作业

我在终点等你

week07总结 性能测试&操作系统

Z冰红茶

关注系统压力测试

麻辣

优秀的求职者,是如何巧妙应对面试提问呢?

xcbeyond

面试 加班 职业规划 薪资 自我介绍

js基础作业总结

Geek_896619

搭建Hadoop开发环境并编写运行测试类

大数据学徒

Java hadoop IDEA

JavaScript 类型判断

卧龙小明

Java 前端

架构师训练营Week7学习总结

Frank Zeng

antd vue upload组件使用customRequest上传文件显示文件上传进度

Seven_xw1213

前端 antd vue upload customRequest 进度条

修改 Docker 数据根目录的 3 种方式

FeiLong

Docker

阿朱的决定

一直AC一直爽

随笔杂谈 观后感

第七周作业

赵龙

解决 transition 在 display 属性上不生效的问题

卧龙小明

css3

总结

chenzt

JavaScript 中 new 一个对象的过程中发生了什么

卧龙小明

Java 前端

iframe 隐藏滚动条、高度自适应及父子页面通信

卧龙小明

CSS Java html 前端

动手实现一下 JavaScript 中的 call, apply 和 bind

卧龙小明

Java 前端

Docker基础修炼5--容器数据共享和持久化实战

黑马腾云

Docker Linux 运维 虚拟化 容器化

Docker基础修炼6--网络初探及单机容器间通信

黑马腾云

Docker Linux 运维 虚拟化 容器化

LeetCode题解:283. 移动零,JavaScript,一次遍历,详细注释

Lee Chen

LeetCode 前端进阶训练营

低代码的认知误区与落地实践

低代码的认知误区与落地实践

使用AngularJS构建大型Web应用-InfoQ