AngularJS开发指南16:AngularJS构建大型Web应用详解
AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容。在该团队工作的软件工程师Brian Ford近日撰写了一篇blog,分享了如何使用AngularJS构建大型Web应用的经验。这些经验对于使用其他JS框架构建大型应用的开发者也极具借鉴意义。
这篇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框架。你可以直接拿来使用,它很快,并且会对组织应用的结构很有帮助。
谈谈如何开始使用AngularJS构建Web应用
AngularJS的理念与JQuery库或其他前端JS框架是不一样的,AngularJS的目标是开发Web应用程序。比如使用jsGen搭建的AngularJS中文社区,一般观众会以为这只是一个普通网站,但实际上它是一个运行在浏览器中的应用程序。当浏览器访问网站时,服务器先反馈一个AngularJS应用的引导页jsgen/static/index.html,该页包含了构建完整AngularJS应用的html、css、js等资源路径,浏览器再依照这些资源路径从服务器获取相关资源,构成完整的AngularJS应用。一旦AngularJS应用加载完毕,它就会从网站读取网站信息、文章等数据,或根据用户的请求获取相关数据,将数据插入到AngularJS应用相关位置,并渲染成用户最终看到的网页。组成AngularJS应用的html、css、js等资源都是静态文件,我们可以把这些静态文件独立出来(即jsgen/static目录下的文件),将数据资源相对路径改成服务器的绝对路径,打包放在本地电脑,那么这个本地AngularJS应用依然是可以在浏览器中运行,并与服务器通信获取数据的完整AngularJS应用。说了这么多,只为告诉你一点:AngularJS应用是一个Web程序,而不是从服务器获取的一个一个网页。
AngularJS的四大功能帮你构建Web应用程序:
UI视图路由导航
该功能帮你从一个视图切换到另一个视图,或者在视图中的局部区域切换。在网页中即表现为从一个网页进入到另一个网页,或者一个网页区域更新。实现该功能的指令有
ng-view、ng-include、ng-switch、ng-show/hide等。数据模型双向绑定
该功能帮你及时更新视图中的数据,或者当你在视图中输入了数据,该数据会立即更新到AngularJS应用的逻辑程序(即JS程序)中。实现该功能的指令有
ng-bind、ng-template等,或者最直接最常用的{{}}。而实现双向绑定的基础是作用域!与远程服务器双向通信
该功能帮你向服务器请求数据或者发送数据。实现该功能的服务是
$http和$resource。模块化管理
该功能帮你进行模块化编程,从而实现大型、复杂的Web应用。当然,简单的AngularJS应用也应该使用模块化编程管理,这是一个好习惯。实现该功能的是
angular.module,angular.module可以说是AngularJS的基础,所有指令、服务、过滤器、控制器均由它派生。
angular开发指南差不多就这样结束了,接下来,将用angular源码来讲解angular的一些机制是如何实现的,等大家了解了源码之后,就能很轻松的使用angular进行开发了。
加油!
AngularJS开发指南16:AngularJS构建大型Web应用详解的更多相关文章
- 使用AngularJS构建大型Web应用
AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML词汇,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...
- T3 - 构建大型 Web 应用的 JavaScript 框架
T3 是一个用于构建大型 Web 应用程序的客户端 JavaScript 框架.T3 和大多数的 JavaScript 框架不同.它的意思是一小部分的整体架构,它允许你建立可扩展的客户端代码.T3 应 ...
- 最锋利的Visual Studio Web开发工具扩展:Web Essentials详解
原文:最锋利的Visual Studio Web开发工具扩展:Web Essentials详解 Web Essentials是目前为止见过的最好用的VS扩展工具了,具体功能请待我一一道来. 首先,从E ...
- JAVA Eclipse使用Maven构建web项目详解(SSM框架)
tips: 启动项目后,welcome-file的链接即为测试用例 部署maven web项目 Eclipse使用Maven构建web项目详解 pom.xml添加webapp依赖: <depen ...
- Spark2.1.0——内置Web框架详解
Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...
- Web.xml详解(转)
这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一. Web.xml详解: (一) web.xml加载过程(步骤) 首 ...
- NGINX高性能Web服务器详解(读书笔记)
原文地址:NGINX高性能Web服务器详解(读书笔记) 作者:夏寥寥 第4章 Nginx服务器的高级配置 4.1 针对IPv4的内核7个参数的配置优化 说明:我们可以将这些内核参数的值追加到Linu ...
- 命令创建.net core3.0 web应用详解(超详细教程)
原文:命令创建.net core3.0 web应用详解(超详细教程) 你是不是曾经膜拜那些敲几行代码就可以创建项目的大神,学习了命令创建项目你也可以成为大神,其实命令创建项目很简单. 1.cmd命令行 ...
- Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解
http://hi.baidu.com/ltb6w/item/3a51f11926fda60ce75c361d Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解 ...
随机推荐
- Linux下集群的搭建
1.集群的简介: 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术. 如果一个事情 ...
- 爆零后的感受外加一道强联通分量HDU 4635的题解
今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...
- 《精解Windows 10》
<精解Windows 10>全面深入讲解Windows 10操作系统的使用方法.本书共计14章内容.第一章简述Windows 10操作系统的一些变革:第二章介绍Modern 2.0界面的体 ...
- [转]【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
本文转自:http://blog.csdn.net/ohmygirl/article/details/17849983 上文( http://blog.csdn.net/ohmygirl/articl ...
- MIT jos 6.828 Fall 2014 训练记录(lab 6)
源代码参见我的github: https://github.com/YaoZengzeng/jos 在这个实验中将实现一个基于Intel 82540M(又称E1000)的网卡驱动.不过,一个网卡驱动还 ...
- python 邮件发送 脚本
import smtplib from email.header import Header from email.mime.text import MIMEText from_addr = 'XXX ...
- Linux与Windows 解压乱码 UTF8BOM读取问题
Linux 与 Windows 文件乱码问题 这几天需要在linux下用CNN跑数据,但是把数据和数据列表list上传到linux下时却出现了不少乱码的问题.将这两天碰到的编码问题简单的总结一下. 1 ...
- UVALive 6450 Social Advertising DFS解法
题意:一些人有朋友关系,在某个人的社交网站上投放广告可以被所有该人的直接朋友看到,问最小投放多少个广告使给出的人都看到广告.(n<=20) 解法:看到n的范围可以想到用二进制数表示每个人被覆盖与 ...
- UVALive 6263 The Dragon and the knights --统计,直线分平面
题意:给n条直线,将一个平面分成很多个部分,再给m个骑士的坐标,在一个部分内只要有一个骑士即可保护该部分,问给出的m个骑士是不是保护了所有部分. 解法:计算每个骑士与每条直线的位置关系(上面还是下面) ...
- A*寻路初探 GameDev.net
A*寻路初探 GameDev.net MulinB按:经典的智能寻路算法,一个老外写的很透彻很清晰,很容易让人理解神秘的A*算法.以下是一个中文翻译版. A*寻路初探 GameDev.net 作者: ...