使用Angular2理由
1. 组件化
组件化编程是web 发展的一个趋势,Angular2提供高效简单的组件开发方式,使程序开发更加关注业务逻辑的实现,而不用关心如何加载组件和模块,如何引用及依赖注入的实现等。
如下代码所示,Angular2提供注解来开发组件,使组件开发变得简单方便,不需要对现行代码进行重大重构或者改写,就可以使用新的功能。Angular2关注与组件的开发,通过组件间的组合来实现业务逻辑,代码关注点更加集中,从而使得组件编程变得异常简单。
|
import {Component} from '@angular/core'; import {bootstrap} from '@angular/platform-browser-dynamic'; @Component({ selector: 'my-app', template: `<h1>My First Angular 2 App</h1>` }) export class AppComponent { --business logic here } bootstrap(AppComponent); |
2. 纯粹的JS
通过上面的示例,可以发现 Angular2使用纯粹的javascript代码编写,调用的方式采用原生的window api,没有其他额外的代码特性。使用原生的javascript代码即可编写,减少了Angular1里面$scope,$timeout等非原生API,这使得开发,测试等环节都变得简单,降低了学习成本。因为采用的都是原生API的方式,Angular2 不仅能够自己写代码片段,而且可以方便的引用他人所写的代码。
3. 类型编程
Angular2不一定要使用TypeScript来编写,然而为什么我们要使用一种浏览器无法识别的语言,然后编译成另外一种语言去使用呢?答案就是:类型检查,文档化,便于共享。
举个简单的例子,这个例子十分简单,简单的计算两个数字的和,并将结构返回。看上去木有什么问题,但是我们传递的参数有可能来自于某个对象或者json数据,当我们将非数字传递进去的时候,得到的结果却不尽人意。
|
function plus(a, b) { return a + b; } let a = plus(2+3); // a = 5 let b = plus(‘2’+’3’); // a = ‘23’ |
当我们使用TypeScript进行编写这段代码的时候,传入非数字类型的参数时在解析的过程中就会提示类型错误。
|
function plus(a:number, b:number):number { return a + b; } let a = plus('2'+'3'); // error |
4. 性能提升
在Angular1中,绝大多数场景下性能都不是问题,不过因为其代码中存在的一个用来实现脏检查的三重循环而饱受抨击。于是,在Angular 2中,通过重新设计和引入新技术,从原理上对速度进行了提升,据官方说是把“变更检测”的效率提升了500%,在“变更检测”算法上做了两项主要的改进:
(1). 在设计上,将以前的“多轮检查、直到稳定”策略直接转变为“一轮检查、直接稳定”策略。
(2). 在实现上,把“变更检测”算法移入了由WebWorker创建的辅助线程中执行,从JavaScript主线程隔离开来,执行完“变更检测”,再通知主线程。
举一个对比的例子,数据量是30*500:
ng1核心代码
|
<html ng-app="app"> <head> <title>Angular1 Example</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script> <script> angular .module('app', []) .controller('appCtrl', function($scope, $interval) { var gridWidth = 30; var gridHeight = 500; var interval = 50; var changePerInterval = 10000; var names = ['Joe', 'Michael', 'David', 'Jones', 'Phil', 'Johnson', 'Janes', 'Anna', 'Hugo', 'Lina', 'Scotte', 'Nam', 'Tran', 'Bill', 'Mark', 'Rihanna', 'Justin', 'Bieber', 'James', 'Cameron', 'Peter', 'Anderson', 'Ronaldo', 'Scholes', 'Giggs', 'Lee', 'Cedric', 'Young', 'Zim', 'Hue', 'Zac', 'Jonas', 'Miley', 'Thomas', 'September', 'Green', 'Red', 'Rose', 'Pink']; $scope.grid = createGrid(); beginDataChanges(); function createGrid() { var grid = []; for (var row = 0; row < gridHeight; row++) { grid[row] = []; for (var column = 0; column < gridWidth; column++) { grid[row].push(getRandomName()); } } return grid; } function getRandomNumber(maxBound) { return Math.floor(Math.random() * maxBound); } function getRandomName() { var i = getRandomNumber(names.length); return names[i]; } function beginDataChanges() { $interval(function() { $scope.grid = createGrid(); }, interval); } }); </script> </head> <body ng-controller="appCtrl"> <table> <tr ng-repeat="row in grid track by $index"> <td ng-repeat="name in row track by $index"> {{name}} </td> </tr> </table> </body> </html> |
ng2 核心代码
|
export class AppCmp { private grid: any; private gridWidth = 30; private gridHeight = 500; private interval = 50; private changePerInterval = 10000; private names = ['Joe', 'Michael', 'David', 'Jones', 'Phil', 'Johnson', 'Janes', 'Anna', 'Hugo', 'Lina', 'Scotte', 'Nam', 'Tran', 'Bill', 'Mark', 'Rihanna', 'Justin', 'Bieber', 'James', 'Cameron', 'Peter', 'Anderson', 'Ronaldo', 'Scholes', 'Giggs', 'Lee', 'Cedric', 'Young', 'Zim', 'Hue', 'Zac', 'Jonas', 'Miley', 'Thomas', 'September', 'Green', 'Red', 'Rose', 'Pink']; constructor() { this.grid = this.initializeGrid(); this.beginDataChanges(); } initializeGrid() { var grid = []; for (var row = 0; row < this.gridHeight; row++) { grid[row] = []; for (var column = 0; column < this.gridWidth; column++) { grid[row].push(this.getRandomName()); } } return grid; } getRandomNumber(maxBound) { return Math.floor(Math.random() * maxBound); } getRandomName() { var i = this.getRandomNumber(this.names.length); return this.names[i]; } beginDataChanges() { setInterval(() => { this.grid = this.initializeGrid(); }, this.interval); } } |
在chrome查看性能分别是:ng1的平均时长是360ms左右,ng2的平均时长是260ms左右,性能提升100ms,虽然木有达到500%,但是提升还是有较大的优化。
ng1性能:

ng2性能:
使用Angular2理由的更多相关文章
- Angular2+URL中的 # 引发的思考
1.先分析 # 的作用 1.1. # 的涵义 #代表网页中的位置.其右面的字符就是该位置的标识符.比如,http://www.example.com/index.html#print就代表网页inde ...
- Angular2、4入门基础知识(小的概念)
1. 使用引用符来格式化HTML代码. @Component({ selector: 'app-heroes', templateUrl: './heroes.component.html', sty ...
- Ionic2优于Ionic1的6个理由
经历了一个从0到有的app的开发,我已经很熟悉Ionic1了,在此期间我曾发现过Ionic1的一些bug,和一些不合理的地方(根基版本 不同,后续我会陆续发表这些文章),我甚至在此期间对Ionic1进 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
随机推荐
- 【跟着子迟品 underscore】JavaScript 数组展开以及重要的内部方法 flatten
Why underscore (觉得这一段眼熟的童鞋可以直接跳到正文了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
- 解决Centos/Redhat,命令不存在
[root@26 ~]# lsb_release #不存在-bash: lsb_release: command not found [root@26 ~] ...
- Hibernate连接数据库超时设置autoReconnect=true
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat. 不用hibernate的话, connection url加参数: autoReconnect ...
- MapReduce实现手机上网日志分析(排序)
一.背景 1.1 流程 实现排序,分组拍上一篇通过Partitioner实现了. 实现接口,自动产生接口方法,写属性,产生getter和setter,序列化和反序列化属性,写比较方法,重写toStri ...
- Css 知识点(不要删)
测试:火狐浏览器,谷歌浏览器,ie 6~9就足够了,现代浏览器从ie10及 以后兼容性好(适合html5) 1.结构用id,内容用class:fr\fl 用于结构上:能用margin-right就不要 ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- Java程序员
从生存.制胜.发展三个方面入手,为大家展示出程序员求职与工作的一幅3D全景图像.本书中既有在公司中的生存技巧,又有高手达人的进阶策略,既有求职攻略的按图索骥,又有入职后生产环境的破解揭秘. 书中浓缩了 ...
- 外景VR的应用
留坑,续写. 最近在做外景的项目,被相关的帧率优化和灯光布置困扰的不要不要的.下面写下我是怎么优化帧率和对帧率的一些理解. 帧率,游戏的重要影响因素,会对玩家的手感以及视觉产生重大的影响,一般的游戏帧 ...
- WordPress数据库优化技巧
各位站长都知道wordpress用久了就会越来越慢.今天就给大家介绍如何给自己的wordpress提速,分两种方法:1.插件属性wordpress的都知道其插件是相当的多,只要你能想得到的基本都有,在 ...
- [Fluent NHibernate]第一个程序
目录 写在前面 Fluent Nhibernate简介 基本配置 总结 写在前面 在耗时两月,NHibernate系列出炉这篇文章中,很多园友说了Fluent Nhibernate的东东,也激起我的兴 ...