如果你是一名前端开发人员,或者是想要学习web前端开发技术的小伙伴,必须要了解的这三款最主流的前端框架。不仅可以帮助你拿到高薪,也能够提升你的编程思想。

目前前端开发技术主要可以分成四个方面:

1、前端开发语言技术

主要是ES6&7,coffeescript,typescript等语法糖;

2、前端开发框架,

如Angular,React,  Vue.js,Angular2等;

3、开发工具的丰富和前端工程化,

像Grunt,Gulp,Webpack,npm,eslint,mocha这些技术;

4、前端开发范围的扩展,

如服务端的nodejs,express,koa,meteor,GraphQL;

移动端和跨平台的PhoneGap,ionic,ReactNative,Weex;

计算机图形学和3维建模领域的WebGL(three.js等);可视化与数据分析领域的d3.js等;

包括浏览器不断开放的更多新特性和接口比如svg,canvas,蓝牙,电池,本地存储,service worker,Houdini等新的API能力,以及像WASM这样的底层优化技术;

就开发框架这块,Angular(1&2)  ,React,   Vue目前占据着主流地位而且会相持比较长的一段时间,所以这里对比一下这三门技术,以便之后的技术选型。

也是目前最主流的三大前端框架。下面25学堂的小编就来跟大家一一比较一下这三款主流前端框架的各自的优缺点。

一 、数据流

数据绑定方面的比较

Angular 使用双向绑定即:界面的操作能实时反映到数据,数据的变更能实时展现到界面。

实现原理:

$scope变量中使用脏值检查来实现。像ember.js是基于setter,getter的观测机制,

$scope.$watch函数,监视一个变量的变化。函数有三参数,”要观察什么”,”在变化时要发生什么”,以及你要监视的是一个变量还是一个对象。

使用ng-model时,你可以使用双向数据绑定。

使用$scope.$watch(视图到模型)以及$scope.$apply(模型到视图),还有$scope.$digest

调用$scope.$watch时只为它传递了一个参数,无论作用域中的什么东西发生了变化,这个函数都会被调用。在ng-model中,这个函数被用来检查模型和视图有没有同步,如果没有同步,它将会使用新值来更新模型数据。

双向绑定的三个重要方法:

$scope.$apply()

$scope.$digest()

$scope.$watch()

在AngularJS双向绑定中,有2个很重要的概念叫做dirty check,digest loop,dirty check(脏检测)是用来检查绑定的scope中的对象的状态的,例如,在js里创建了一个对象,并且把这个对象绑定在scope下,这样这个对象就处于digest loop中,loop通过遍历这些对象来发现他们是否改变,如果改变就会调用相应的处理方法来实现双向绑定

Vue 也支持双向绑定,默认为单向绑定,数据从父组件单向传给子组件。在大型应用中使用单向绑定让数据流易于理解。

脏检测的利弊

和ember.js等技术的getter/setter观测机制相比(优):

getter/setter当每次对DOM产生变更,它都要修改DOM树的结构,性能影响大,Angular会把批量操作延时到一次更新,性能相对较好。

和Vue相比(劣):

Vue.js 有更好的性能,并且非常非常容易优化,因为它不使用脏检查。Angular,当 watcher 越来越多时会变得越来越慢,因为作用域内的每一次变化,所有 watcher 都要重新计算。并且,如果一些 watcher 触发另一个更新,脏检查循环(digest cycle)可能要运行多次。

Angular 用户常常要使用深奥的技术,以解决脏检查循环的问题。有时没有简单的办法来优化有大量 watcher 的作用域。

Vue.js 则根本没有这个问题,因为它使用基于依赖追踪的观察系统并且异步列队更新,所有的数据变化都是独立地触发,除非它们之间有明确的依赖关系。

唯一需要做的优化是在 v-for 上使用 track-by。

React-单向数据流

MVVM流的Angular和Vue,都是通过类似模板的语法,描述界面状态与数据的绑定关系,然后通过内部转换,把这个结构建立起来,当界面发生变化的时候,按照配置规则去更新相应的数据,然后,再根据配置好的规则去,从数据更新界面状态。

React推崇的是函数式编程和单向数据流:给定原始界面(或数据),施加一个变化,就能推导出另外一个状态(界面或者数据的更新)。

React和Vue都可以配合Redux来管理状态数据。

二部分比较: 视图渲染

Angular1

AngularJS的工作原理是:HTML模板将会被浏览器解析到DOM中, DOM结构成为AngularJS编译器的输入。AngularJS将会遍历DOM模板, 来生成相应的NG指令,所有的指令都负责针对view(即HTML中的ng-model)来设置数据绑定。因此, NG框架是在DOM加载完成之后, 才开始起作用的。

React

React 的渲染建立在 Virtual DOM 上——一种在内存中描述 DOM 树状态的数据结构。当状态发生变化时,React 重新渲染 Virtual DOM,比较计算之后给真实 DOM 打补丁。

Virtual DOM 提供了函数式的方法描述视图,它不使用数据观察机制,每次更新都会重新渲染整个应用,因此从定义上保证了视图与数据的同步。它也开辟了 JavaScript 同构应用的可能性。

在超大量数据的首屏渲染速度上,React 有一定优势,因为 Vue 的渲染机制启动时候要做的工作比较多,而且 React 支持服务端渲染。

React 的 Virtual DOM 也需要优化。复杂的应用里可以选择

1. 手动添加 shouldComponentUpdate 来避免不需要的 vdom re-render;

2. Components 尽可能都用 pureRenderMixin,然后采用 Flux 结构 + Immutable.js。

其实也不是那么简单的。相比之下,Vue 由于采用依赖追踪,默认就是优化状态:动了多少数据,就触发多少更新,不多也不少。

React 和 Angular 2 都有服务端渲染和原生渲染的功能。

Vue.js 不使用 Virtual DOM 而是使用真实 DOM 作为模板,数据绑定到真实节点。Vue.js 的应用环境必须提供 DOM。Vue.js 有时性能会比 React 好**,而且几乎不用手工优化。

三 性能与优化

性能方面,这几个主流框架都应该可以轻松应付大部分常见场景的性能需求,区别在于可优化性和优化对于开发体验的影响。

Vue 的话需要加好 track-by 。

React 需要 shouldComponentUpdate 或者全面 Immutable,

Angular 2 需要手动指定 change detection strategy。

从整体趋势上来说,浏览器和手机还会越变越快,框架本身的渲染性能在整个前端性能优化体系中,会渐渐淡化,更多的优化点还是在构建方式、缓存、图片加载、网络链路、HTTP/2 等方面。

四 模块化与组件化

Angular1 -> Angular2

Angular1使用依赖注入来解决模块之间的依赖问题,模块几乎都依赖于注入容器以及其他相关功能。不是异步加载的,根据依赖列出第一次加载所需的所有依赖。

可以配合类似于Require.js来实现异步加载,懒加载(按需加载)则是借助于 ocLazyLoad 方式的解决方案,但是理想情况下应该是本地框架会更易懂。

Angular2使用ES6的module来定义模块,也考虑了动态加载的需求。

Vue

Vue中指令和组件分得更清晰。指令只封装 DOM 操作,而组件代表一个自给自足的独立单元 —— 有自己的视图和数据逻辑**。在 Angular1 中两者有不少相混的地方。

React

一个 React 应用就是构建在 React 组件之上的。

组件有两个核心概念:props,state。

一个组件就是通过这两个属性的值在 render 方法里面生成这个组件对应的 HTML 结构。

传统的 MVC 是将模板放在其他地方,比如 script 标签或者模板文件,再在 JS 中通过某种手段引用模板。

按这种思路,想想多少次我们面对四处分散的模板片段不知所措?纠结模板引擎,纠结模板存放位置,纠结如何引用模板。

React 认为组件才是王道,而组件是和模板紧密关联的,组件模板和组件逻辑分离让问题复杂化了。所以就有了 JSX 这种语法,就是为了把 HTML 模板直接嵌入到 JS 代码里面,这样就做到了模板和组件关联,但是 JS 不支持这种包含 HTML 的语法,所以需要通过工具将 JSX 编译输出成 JS 代码才能使用(可以进行跨平台开发的依据,通过不同的解释器解释成不同平台上运行的代码,由此可以有RN和React开发桌面客户端)。

五 语法与代码风格

React,Vue,Angular2都支持ES6,Angular2官方拥抱了TypeScript这种 JavaScript 风格。

React 以 JavaScript 为中心,Angular 2 依然保留以 HTML 为中心。Angular 2 将 “JS” 嵌入 HTML。React 将 “HTML” 嵌入 JS。Angular 2 沿用了 Angular 1 试图让 HTML 更强大的方式。

React 推荐的做法是 JSX + inline style,也就是把 HTML 和 CSS 全都整进 JavaScript 了。Vue 的默认 API 是以简单易上手为目标,但是进阶之后推荐的是使用 webpack + vue-loader 的单文件组件格式(template,script,style写在一个vue文件里作为一个组件

六 相关文章资料汇总:

[译] Angular 2 VS. React: 血色将至:

[原译] React vs Angular 2: 战争继续:

Vue.js 对比其它框架:

Angularjs双向绑定的研究:

Angular 从 1 到 2 快速参考:

知乎:react.js,angular.js,vue.js学习哪个好?

React 简介和原理:

浴火重生的Angular:

React 入门教程:

Vue.js官方文档:

Angular2中文文档:

本文的话题实际上很大,需要对Angular,React和Vue三门技术有足够深入的了解,所以难免有很多总结的不全或者不够深入的地方,后续我会不断完善和修改。

以上内容来源:http://blog.csdn.net/haoshidai/article/details/52346865#comments  感谢作者的分享。

2017html5框架排名,2017年最主流前端框架比较:Angular、React 和 Vue相关推荐

  1. 视频教程-主流前端框架下ArcGIS API for JavaScript的开发-其他

    主流前端框架下ArcGIS API for JavaScript的开发 毕业于中国矿业大学地理信息科学专业.现就任于全球领先的GIS公司,主要担任地理平台研发工作,日常工作任务是ArcGIS JS A ...

  2. vue ui框架_你为什么要使用前端框架Vue?

    1.前端框架的根本意义 1.1 前端框架的好处 最开始学习前端框架的时候(我第一个框架是 React)并不理解框架能带来什么,只是因为大家都在用框架,最实际的一个用途就是所有企业几乎都在用框架,不用框 ...

  3. Vue为什么能逆袭 Angular和React成为主流前端框架?

    作者 | Maja Nowak  译者 | 苏本如  责编 | 屠敏 来源:CSDN https://www.monterail.com/blog/reasons-why-vuejs-is-popul ...

  4. 3大主流前端框架对比

    2019独角兽企业重金招聘Python工程师标准>>> 框架对比   Angular React Vue.js 组织方式 MVC 模块化 模块化 数据绑定 双向 单向 双向 模板能力 ...

  5. 三大主流前端框架比较,程序员会怎么选?

    关于Web前端三大框架,一直以来是广大前端开发者口水战必争话题.那么今天也来趟一趟这浑水,仅仅是个人一点小的看法,轻喷哦~ 之所以Web前端框架这个话题热度那么高,很大程度上是因为受众众多.这一点要解 ...

  6. 2019年三大主流前端框架比较,程序员会怎么选?

    关于Web前端三大框架,一直以来是广大前端开发者口水战必争话题.那么今天也来趟一趟这浑水,小编个人一点小的看法,轻喷哦~ 之所以Web前端框架这个话题热度那么高,很大程度上是因为受众众多.这一点小编要 ...

  7. 前端html5的框架有哪些,10大html5前端框架

    10大html5前端框架 Bootstrap 首先说Bootstrap,估计你也猜到会先说,或者一定会有这个了,这是说明它的强大之处. 拥有框架一壁江山的势气. 自己刚入道的时候,本着代码任何一个字母 ...

  8. php开发前端的框架有哪些,网站的一些前端框架有哪些?4个前端框架对比

    网站的一些前端框架有哪些?前端框架主要是为了简化网站设计的框架,现在前端框架有很多种,下面php中文网就为您总结一下前端框架对比. 目前前端框架有很多种,但是使用最多的也就几种,并且每一个框架都会有自 ...

  9. 「深入浅出」主流前端框架更新批处理方式

    作者 |

最新文章

  1. CF703D Mishka and Interesting sum(求区间出现次数偶数次数的异或和)
  2. [程序员创造力训练 1] 猜单词 - 关于健康
  3. 7.unity插件T4M使用
  4. MySQL主从库--同步异常
  5. python中del语句
  6. Unity3D-C#脚本介绍
  7. java声明一个函数_java – 如何声明一个函数参数来接受抛出的函数?
  8. 【Unity开源项目精选】xLua:Unity热更新首选
  9. USACO1.1.3 - Friday the Thirteenth
  10. python函数编写_Python函数(二)如何编写函数
  11. linux下alias命令具体解释
  12. 斗鱼直播实时数据爬取
  13. 费曼学习法、卡片盒笔记法
  14. 【lua语言从青铜到王者】第二篇:开发环境搭建+3种编辑器使用示例
  15. 笔记本 安装服务器系统,笔记本电脑安装Windows Server 2016之我见
  16. 用python把图片换成蓝底_详解Python给照片换底色(蓝底换红底)
  17. Mybatis-Plus根据时间段去查询数据
  18. pythonend什么意思_Python中的 \t 和 end=” 是什么意思?
  19. 计算机专业b区大学,b区考研学校,b区考研学校排名。
  20. 服务器怎样创建多台虚拟主机,服务器是如何实现多台虚拟主机

热门文章

  1. Keil ARM开发 error L6236E错误解决
  2. 牛客寒假营-小沙的身法-(lca+思维)
  3. 热情贡献!!!史上最全openstack资料大全!!!你值得拥有!!!
  4. conda 安装 jupyter lab
  5. latex 附录 表格 公式 重新编号
  6. Unity开发数字孪生编辑器操作与Undo设计
  7. PS如何降低选取内图像的亮度?
  8. C/C++——制作音乐播放器项目
  9. Centos修改IP的两种方式
  10. 大数据教育联盟在京成立