前端开发框架技术选型:Angular2 VS React VS jQuery

iefreer 发表于 2016-12-12 12:58:22

标签: angular, angular2, react

- +

Angular和React是主流的2个前端开发框架,但是严格来说两者并非对等的概念。

Angular是一个基于MVC(或者MVVM)的框架,包含model(模型)/view(视图)/controller(控制器),

React只有view(视图)层。而Angular2使用TypeScript重建了整个框架,好处是可以利用TypeScript的增强语法。

相对而言Angular是一个重量级的开发框架,而React是一个界面库,React要加上Flux可以成为一个快速开发框架。

Angular通过双向绑定提供了更多的交互性,另外也提供了方便构建单页应用的服务和路由。

React的主要目标是给开发者提供表现层可复用的声明式界面插件,背后的事情留给开发者来完成。

而jQuery我们都很熟悉,是一个可扩展的开发库。

Angular架构

angular_arch.jpg

Angular的后台机制设计吸收了BackboneJS和Knockout等其他早期JS框架的很多概念,整体架构包含模块(Module)、模板(Template)、组件(Component)、元数据(Metadata)、双向绑定、指令(Directive)和依赖注入(Dependency Injection)。其中DI主要是用于在创建组件时由Injector自动注入所依赖的服务层逻辑,这是沿用Java里面的类似概念。

React架构(Flux)

blob.png

Flux纸面意思表示“变化”,体现了该架构的意图,就是为了应对Web端数据变化越来越多的客观情况。

Flux本质上是表示上图这样一个单向数据流的实现,这在桌面和本地应用被实现过N种类似版本,只是现在搬迁到Web上来了。

  1. 当用户和视图(View)交互发生变化时,触发一个动作(Action);

  2. 动作被分发器(Dispatcher)派发给该动作对应的回调函数来更新数据模型(Store);

  3. Store数据更新后会发送change事件来通知View;

  4. 控制器视图(controller-views)侦听change事件并接收新数据做出相应的界面更新。

Angular和React功能比对表
FeaturesAngular2React
AuthorGoogleFacebook
LanguageTypeScriptJSX, ES5, ES6
DesigningJavaScript into HTMLJavaScript Centric
JavaScriptLessMore
FailureRun-timeCompile-time
DOMRegularVirtual
Binding1 / 2- wayUni-directional
TemplatingIn.ts filesIn.jsx file
Mobile SupportIonic FrameworkReact Native
MVCYesV-only
RenderingServer-sideServer-side

无论使用Angular还是React,相比jQuery,都会在前端引入新的复杂度,

那么为什么还需要这些框架呢?如前所述,这源于客观上Web端有了越来越多的数据和交互,

一个大型的界面程序(如Facebook自己的应用)需要有一些最佳实践(如组件化)来规范化这些交互过程,

提高代码在团队之间的可复用性和可维护性。看下面个图,对于复杂应用,我们会有直观的认识:

jquery-style-vs-react-style.png

当交互事件繁杂时,要避免一团糟,如果我们使用jQuery就需要自行实现一个中间管理(事件代理)对象并重构相应的业务代码,

而React已帮你很好的实现了。下面是分别使用jQuery和React实现的微博评论框界面组件代码,可以自己体会下:

http://wow.techbrood.com/fiddle/31660

http://wow.techbrood.com/fiddle/31659


最后,尽管本文说明了Angular和React的设计思路和好处,但是需要指明的是不要盲目使用这些框架。

我们认为对于小的网页应用,使用jQuery仍然要简洁直观(容易理解)得多,就是查找元素/侦听事件/操作DOM。

React把标记(HTML)和行为(JS)混合在一起的方式以及引入的状态变化中间过程,对于大型应用有助于组件化,

但对于小型应用,实际上比脚本和标记分离更难以维护。

possitive(2) negative(0) views1366 comments0
私信 收藏 分享
分享到

发送私信

最新评论

请先 登录 再评论.
相关文章
  • 创建非矩形网页页面元素的常用技术和实例代码

    非矩形设计正在变成一种时尚,比如波浪形、菱形、三角形等:而随着技术发展,这种设计在技术实现上也变得更容易。本文以最简单的三角形为例,演示使用5种方法来...

  • 常见面试题JS语言中四种函数调用方式实例讲解

    JS的语言世界中函数(function)是一等公民,函数的调用有多种方法。普通调用这个是最常见和直接的方式:function

  • HTML5、Hybrid APP、Native APP对比和技术选型

    HTML5和Native APP都很容易理解。为了获得HTML5的移植性和移动本地应用的高性能,搞出来一些混合APP的解决方案。比如Apache的Cordova(也就是以前的PhoneGap),...

  • 学习使用CSS制作进度条

    进度条是基础的界面控件,可用于多种场合,比如任务完成进度,手机充电状态等。本文介绍一个简单实用的进度条制作方法。预期效果如下图所示:直观上,我们可以把该进度条控件分为2个部分,外部的边界用来表示固定的目标范围,里面的条形部分用来表示当前进度。外部目标范围元素的CSS代码编写如下:.pb-scope

  • 计算WebGL中的uniforms变量使用数

    在使用Three.js为人体模型加载皮肤材料时,启用了skinning:true的参数。有时候会导致GL编译错误,提示“too many uniforms”。下面的文章有助于理解错误原因和检...

  • WebGL 纹理映射模式以及WRAP_S | WRAP_T参数详解

    我们在纹理滤镜一文中已经说明了2个重要的纹理参数,用来定义对象缩放时纹理的处理方式:GL_TEXTURE_MIN_FILTERGL_TEXTURE_MAG_FILTER本文讲解其余几个纹理参数...

  • CSS3图片混合(Blend)效果及其参考计算公式一览表

    在Photoshop软件中,混合是将两个图层的色彩值进行合成,从而创造出大量的效果。在这些效果的背后实际是一些简单的数学公式在起作用。下面所介绍的公式仅适用于R...

  • Three.js 开发基础知识 - 绘制3D对象

    Three.js是一个用来简化WebGL开发的JavaScript库,比如绘制一个三维立方体,使用WebGL需要100多行,那Three.js只要10几行就能够完成。本文通过创建一个立方体来...

  • 如何使用CSS3实现书页(书本)卷角效果

    我们有时候想在页面显示一个公告或用户提示信息。一个常用设计是使用书签形状。我们可以给书签添加卷角效果,以使其更为逼真。所谓的“卷角”实际上可以用小角度...

  • 更多...