返回信息流最近在看React,有1个问题不解。希望有人能指点一下。
每一次更新状态,都需要执行一下render一下,虽然改变的是虚拟dom,
但是最终还是要渲染到浏览器里,也就是需要改变实际的DOM,这就涉及
到reflow和repaint,这部分的时间是没办法优化的对吧?
对比Angular的脏检查,那么react优化的是哪部分呢?
这是一条镜像帖。来源:北邮人论坛 / www-technology / #31389同步于 2015/9/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
(求助)React的一些问题
biger
2015/9/20镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
react 优化的是 DOM 操作的部分。
js 的运行速率相对于浏览器更新 DOM 的时间是非常快(就是 js 运行比 reflow 和 repaint 快得多了)
自己建了一个虚拟 DOM,每次更新对比虚拟 DOM 的变化,然后把变化的那一部分应用到 DOM 上,避免不必要的 DOM 操作,提高了性能
https://www.youtube.com/watch?v=z5e7kWSHWTg,这里面就跑了几个demo来说明React到底有多快,还比较了Angular和React,但是这是站在React立场上。
这里也有一篇博文来说React的速度不怎的,http://blog.500tech.com/is-reactjs-fast/
Angular没怎么玩过,不好说,从网上的分析看,赞成各有优势
但是相比原生dom操作,个人觉得React优势很大,比如,document.createElement('div')这样创建一个dom节点,看看第一层属性有多少,再用React的方式创建一个,大概第一层就只有这些属性props, _owner, _lifeCycleState, _pendingProps可能还有几个。再一个比如dom修改,React的虚拟dom操作用js,内部实现了一个dom diff算法,比原生dom操作快很多,再有,React对组件的生命期控制,能够在update生命期中进一步优化速度,还有一些不可变辅助插件,都能加快速度
最后一个,repaint和reflow不是不能优化,而是优化的办法有很多
嗯,谢谢。
我最后一句话的意思是,涉及到reflow和repaint的部分,react能优化,但angular等其他的也能优化啊。
这部分不是react比angular更快的原因吧?
【 在 zhong9721 的大作中提到: 】
: https://www.youtube.com/watch?v=z5e7kWSHWTg,这里面就跑了几个demo来说明React到底有多快,还比较了Angular和React,但是这是站在React立场上。
: 这里也有一篇博文来说React的速度不怎的,http://blog.500tech.com/is-reactjs-fast/
: Angular没怎么玩过,不好说,从网上的分析看,赞成各有优势
: ...................
你是说react每次只操作一部分DOM?而Angular等其他不是?
这涉及到浏览器的渲染的知识吧,我有点糊涂。
【 在 emlcj 的大作中提到: 】
: react 优化的是 DOM 操作的部分。
: js 的运行速率相对于浏览器更新 DOM 的时间是非常快(就是 js 运行比 reflow 和 repaint 快得多了)
: 自己建了一个虚拟 DOM,每次更新对比虚拟 DOM 的变化,然后把变化的那一部分应用到 DOM 上,避免不必要的 DOM 操作,提高了性能
实际上,每次setState或者传入props,都会更新组件中render方法返回值中与state或者props相关部分重新修改虚拟dom树。这点是没问题的。
而性能的提升在于React对于虚拟dom树有个diff的处理,并且不是更改,而是从改变的那个节点向下全部替换。
再加上React的组件化的思路,是会将dom树的改变控制在比较小的范围内的,而且提供了合并修改的方法—setState,不会导致像angular那样每次修改某个值都会操作dom,并且进行的脏检查是全局的,不像react那样是局部的。所以React会有显著的性能提升。
【 在 biger 的大作中提到: 】
: 最近在看React,有1个问题不解。希望有人能指点一下。
:
: 每一次更新状态,都需要执行一下render一下,虽然改变的是虚拟dom,
: 但是最终还是要渲染到浏览器里,也就是需要改变实际的DO
: .........
发自「贵邮」
【 在 biger 的大作中提到: 】
: 你是说react每次只操作一部分DOM?而Angular等其他不是?
: 这涉及到浏览器的渲染的知识吧,我有点糊涂。
angular 是全局的脏检查,而且是“一有更改,马上更新”,但是 react 是在 render() 之后,对虚拟 DOM 的比较,并且是“局部更新”,而且这个更新是有一定“时延”的。
谁快谁慢没有绝对的说法,网上讨论也比较多,都是各说各的理
【 在 biger 的大作中提到: 】
: 嗯,谢谢。
: 我最后一句话的意思是,涉及到reflow和repaint的部分,react能优化,但angular等其他的也能优化啊。
: 这部分不是react比angular更快的原因吧?
: ...................