GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

React 真的比 AngularJS 快吗?

2015 年 6 月 03 日

React 自诞生以来,一直以其渲染速度快著称,特别与 AngularJS 和 EmberJS 等相比更是如此。但也有人不同意这个观点,以色列软件开发公司 500Tech 的 CEO Boris Dinkevich 近日发表博文称,其实React 并不真正比AngularJS 快。

React 之所以被人们认为快的原因,是因为 DOM 操作起来很慢,而 React 采用了 Virtual DOM 来避免直接对 DOM 进行操作。Boris 认为,实际上官方并没有提供 Demo 来说明性能提升了多少,而 Virtual DOM 带来的 Javascript 对数据的复杂操作可能会抵消它的好处。在考察了演示 React 和 AngularJS 对比的两个广为传播的 Demo 后,Boris 的结论是,基于 Virtual DOM 的框架并不比传统的框架要快。

第一个大家看得最多的 Demo 来自于 React.js Conf 2015 上的演示,内容是React 和AngularJS 的对比(Demo: React AngularJS )。Boris 发现,这个 demo 其实对 AngularJS 并不公平,因为 demo 作者忽视了 AngularJS 里基本的提升性能的语句“ track by ”。只需简单的修改一行代码,将原来的:

<ol><li><code>ng-repeat="(key, db) in databases"</code></li></ol>修改为:

<ol><li><code>ng-repeat="(key, db) in databases track by key"</code></li></ol>就可以看到,修改后的 AngularJS Demo 速度大大提升,并不比 React 的表现要慢。

第二个 Demo 来自于 ng-conf 2015 的演示,可以看到在Angular 的指令中使用React 后速度显著提升。但Boris 认为这个对比并不公平,因为它演示的是React 组件渲染对比Angular 渲染和数据处理。在Angular Demo 里选择使用 isolated scope 后,结果显示两者之间的速度差别不大。

Boris 的文章在 Hacker News 上引起了激烈讨论,有些人认为作者言过其实,他们在自己的项目中使用 React 部分代替 Angular 后速度快了很多;也有些人拥护作者的观点,认为 React 在过去的一段时间里被过度营销,一些 Demo 并未考虑实际情况。但还有一些人则认为速度并不是 React 的卖点,用户 feedjoelpie表示

React 只是使用起来非常友好并且易于理解,是 virtual DOM 让这一切成为可能,同时速度能够让人接受。DOM diff 的目标并不在于让 React 变得比它的同胞更快,而是让你不用再考虑 DOM,取而代之的是关注你前端的全局状态。

他同时还推荐了另一篇介绍 React 优点的文章。也许,现在是抛开迷思,重新思考React 能给我们带来什么的时候了。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 6 月 03 日 08:1416861
用户头像

发布了 164 篇内容, 共 90.7 次阅读, 收获喜欢 380 次。

关注

评论

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

week03总结

xxx

缓存服务-技术专题-解决方案

李浩宇/Alex

Hazelcast IMDG 带你瞬间进入内存计算的时代

张磊

分布式计算 内存管理 分布式缓存 分布式内存网格

有这些要素,架构才完整

北风

架构 架构师之道 架构方法

那个百无一用的技术主管

极客思享

发几张国庆的照片

亨利笔记

容器 k8s Harbor 镜像

算法岗有没有泡沫

极客思享

week03作业

xxx

Malagu 框架介绍

木香丘

云计算 开源 Serverless 架构 框架

第四周作业

极客大学架构师训练营

spring-boot-route(九)整合JPA操作数据库

Java旅途

Java Spring Boot jpa

使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源(二)

mzlogin

jsDelivr CDN Jekyll GitHub Pages 个人博客

极客时间架构 1 期:第 3 周代码重构 - 学习总结

Null

深入剖析go中字符串的编码问题——特殊字符的string怎么转byte?

Gopher指北

go golang 后端 string utf-8

架构师1期-代码重构作业

ltl3884

极客大学架构师训练营

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

尹斌

甲方日常 26

句子

生活 随笔杂谈 日常

java安全编码指南之:方法编写指南

程序那些事

java安全编码 java安全 java安全编码指南

架构师训练营第四周作业

尹斌

共享服务中心建设原则-《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 研发管理 DDD

基于 Spring Boot 的企业级快速开发框架 BDF3

木香丘

架构 Spring Boot 可视化 后台管理系统

LeetCode题解:226. 翻转二叉树,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营第三周作业(9.28-10.4)

zjzj2017

Redis-技术专题-基础介绍

李浩宇/Alex

Python 为什么不支持 switch 语句?

Python猫

Python 编程

架构师训练营第三小结(9.28-10.4)

zjzj2017

技术人为什么该坚持写作?

极客思享

菜鸟工程师的超神之路 -- 从校园到职场

极客思享

演化过程中的技术与业务双驱引擎

boshi

云计算 架构 中台 成长 数字化

如何高质量学习与正确运用设计模式

木香丘

学习 设计模式 实战

Serverless 多云解决方案 Malagu

木香丘

云计算 Serverless 架构 云原生 Malagu

DNSPod与开源应用专场

DNSPod与开源应用专场

React真的比AngularJS快吗?-InfoQ