对react vd 性能的理解
相信大家都知道react vd的性能是很好的,速度挺快的,真实dom操作很慢的,但是结果完全相反;
后来我就做了个测试,从两个方面去测试,在页面初始渲染1w条数据,react渲染耗时超过了1秒 在1200毫秒左右,而原生使用拼接字符串然后使用innerHTML进行添加到文档,耗时几十毫秒 在35毫秒左右;仅仅也就是一个循环的耗时;
另外一个测试是在上面的数据渲染完后,给每一项绑定单机事件,然后事件触发后更改当前的标题内容,react耗时 300毫秒左右,如果我用原声的去更改就是直接修改当元素的标题了,耗时可想而知了,基本可以忽略了吧。
当前react这个的耗时结果是可以进行优化的,然后我提出一个子组件,然后在子组件上使用了shouldComponentUpdate 方法进行了优化处理,只在标题改变的时候才进行渲染子组件,测试后耗时有所提升 耗时为 250毫秒左右,提升了60-80毫秒;
出现这样的结果是为什么呢?
首先react更新dom是通过操作数据改变的,然后进行vd的diff后在进行更新到页面,而原生的操作是直接操作的节点,速度到底哪个快很明确了吧;
那react的使用到底解决了什么问题呢?
react最直接的就是帮我们屏蔽了对dom的操作,让我们用组件化和声明的方式去编码,让我们的代码更加的容易维护。而如果我们用原生代码去操作dom,如果代码不进行优化和处理那性能也很是问题,而且后期的维护的成本也是很大的,
项目慢慢发展变的很大,性能问题会逐步显现,但是每个点都去优化又不是那么现实。而react框架的特性是数据驱动视图,底层已经对性能做了处理,在不需要我们进行手动处理的情况下依然可以给我们一种差不多的性能,是能被用户接受的性能,当然我上面的测试是一种特例,
实际中也不会有一次渲染1w条数据的,框架解决的最大问题就是后期的维护的问题,同时也提供了过的去的性能,不然这么多大厂也不会使用他了。
其实要学习react 如果对框架有更多的了解的话,可能后面的学习会顺畅,很多谜团都会自然解开。
对react vd 性能的理解的更多相关文章
- 如何对react进行性能优化
React本身就非常关注性能,其提供的虚拟DOM搭配上DIff算法,实现对DOM操作最小粒度的改变也是非常高效的,然而其组件的渲染机制,也决定了在对组件更新时还可以进行更细致的优化. react组件 ...
- React 组件性能优化
React组件性能优化 前言 众所周知,浏览器的重绘和重排版(reflows & repaints)(DOM操作都会引起)才是导致网页性能问题的关键.而React虚拟DOM的目的就是为了减少浏 ...
- react中性能优化的点
react提升代码性能的点 1.绑定如果改变作用域点话放在constructor里面做,这样可以保证整个程序的作用域绑定操作只会执行一次,而且避免子组件的无谓渲染. 2.内置的setState是个异步 ...
- React Native 性能优化指南【全网最全,值得收藏】
2020 年谈 React Native,在日新月异的前端圈,可能算比较另类了.文章动笔之前我也犹豫过,但是想到写技术文章又不是赶时髦,啥新潮写啥,所以还是动笔写了这篇 React Native 性能 ...
- React中JSX的理解
React中JSX的理解 JSX是快速生成react元素的一种语法,实际是React.createElement(component, props, ...children)的语法糖,同时JSX也是J ...
- 【react】---pureComponent的理解
一.pureComponent的理解 pureComponent表示一个纯组件,可以用来优化react程序.减少render函数渲染的次数.提高性能 pureComponent进行的是浅比较,也就是 ...
- 看Facebook是如何优化React Native性能
原文出处: facebook 译文出处:@Siva海浪高 该文章翻译自Facebook官方博客,传送门 React Native 允许我们运用 React 和 Relay 提供的声明式的编程模型, ...
- React 组件性能优化探索实践
转自:http://www.tuicool.com/articles/Ar6Zruq React本身就非常关注性能,其提供的虚拟DOM搭配上Diff算法,实现对DOM操作最小粒度的改变也是非常的高效. ...
- React组件性能优化
转自:https://segmentfault.com/a/1190000006100489 React: 一个用于构建用户界面的JAVASCRIPT库. React仅仅专注于UI层:它使用虚拟DOM ...
随机推荐
- Xcode上传appstore 出现 Found an unexpected Mach-O header code: 0x72613c21 错误
网上说是静态库的问题
- C语言使用指针表示数组的注意事项
1)数组名是指针常量 如对指针变量可以进行++运算,但是对数组名却不允许,另外,对数组名的赋值运算也是错误的 2)注意指针变量的当前值 指针变量的值在程序运行过程中可能经常改变,要对此注意 3)数组越 ...
- LUNA16数据集(一)简介
LUNA16,全称Lung Nodule Analysis 16,是16年推出的一个肺部结节检测数据集,旨在作为评估各种CAD(computer aid detection计算机辅助检测系统)的ban ...
- Unity 动画系统 Animation 和 Animator 联系与区别
- 【bzoj2935】[Poi1999]原始生物
2935: [Poi1999]原始生物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 145 Solved: 71[Submit][Status][D ...
- UVA12558 Egyptian Fractions (HARD version)(埃及分数)
传送门 题目大意 给出一个真分数 a/b,要求出几个互不相同的埃及分数(从大到小),使得它们之和为 a/b (埃及分数意思是分子为1的分数,详见百度百科) 如果有多组解,则分数数量少的优先 如果分数数 ...
- Oracle 树形SQL语句,SYS_CONNECT_BY_PATH 函数
转一个SYS_CONNECT_BY_PATH 函数的例子.推断原表应该是这样: Child Parent ------------------------ ...
- 5月 28日css前端知识
a:link {color : #FF0000} #未访问连接时设置颜色 a:visited {color: #FF0000} #访问过得连接设置颜色 a:hover {color: #F ...
- VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试
1.VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试 https://download.csdn.net/download/qq_39441918/10522539 2.*注意 ...
- 浅谈soa之RESTful
今晚打算花点时间整理一下面向服务的架构oap.1传统中小型项目架构一般是这样的:(java)html+servlet+jdbc.和(.net)html+handler+ado.net都是在一台应用来. ...