BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #36105同步于 2016/5/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

求问虚拟Dom和普通的区别

xssd
2016/5/9镜像同步8 回复
虚拟Dom用了改进的Diff算法只修改一部分元素 但是看了个源码的帖子,底层也是对Dom的增删改,就是算法后应该改变的元素进行dom操作 想问 如果普通的效果不好是因为修改dom会导致大部分元素reflow,那Diff以后某些元素的增删不会触发其他元素的reflow吗??
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
rhj1122机器人#1 · 2016/5/9
减少也是一种优化 appendChild和insertBefore有什么有哪些不同呢
dcy0701机器人#2 · 2016/5/9
虚拟dom 指的应该是树形的数据结构吧,用js模拟了一个dom树。 感觉就是在 dom树和Virtual DOM 里面加了一层缓存。类比CPU和硬盘,CPU是只操作内存。 步骤应该是 1。js模拟表示dom树 2。state变更时候,生成新的虚拟dom树,比较两颗dom树。记录差异 3。 将差异渲染到真实的dom上。 至于是否会reflow,有差异则更新,无差异则不更新。 关键点在于。框架会一次把最终形态给映射出来,而完全忽略了中间的过程。
xssd机器人#3 · 2016/5/10
类似于用DocumentFragment批量修改可以优化dom操作这样吗 【 在 dcy0701 的大作中提到: 】 : 虚拟dom 指的应该是树形的数据结构吧,用js模拟了一个dom树。 : 感觉就是在 dom树和Virtual DOM 里面加了一层缓存。类比CPU和硬盘,CPU是只操作内存。 : 步骤应该是 : ...................
xssd机器人#4 · 2016/5/10
一个影响子元素一个影响后面的元素?? 不知道。。 【 在 rhj1122 的大作中提到: 】 : 减少也是一种优化 : appendChild和insertBefore有什么有哪些不同呢
dcy0701机器人#5 · 2016/5/10
当然可以,但是并不能改变dom本身操作慢的问题。 virtual dom也不可能改变dom本身慢的问题 比如说,现在你的list是这样, <ul> <li>0</li> <li>1</li> <li>2</li> <li>3</li> </ul> 你想把它变成这样 <ul> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> 你用dom直接操作,需要删除4次,添加五次。 但是diff 之后,可能不用删除1234 只需要修改innerHTML 比9次操作快多了 Virtual DOM 不可能解决dom本身慢的缺点。 diff 可能只是为了优化操作dom的API,减少dom操作的复杂性,这里面根据不同的diff遍历结果有很多的优化,也可能包括DocumentFragment。 【 在 xssd 的大作中提到: 】 : 类似于用DocumentFragment批量修改可以优化dom操作这样吗 :
xssd机器人#6 · 2016/5/10
懂啦~ 非常感谢~! 【 在 dcy0701 的大作中提到: 】 : 当然可以,但是并不能改变dom本身操作慢的问题。 : virtual dom也不可能改变dom本身慢的问题 : : ...................
Caolixiang机器人#7 · 2016/5/10
http://www.zhihu.com/question/29504639
xssd机器人#8 · 2016/5/10
蟹蟹~ 【 在 Caolixiang 的大作中提到: 】 : http://www.zhihu.com/question/29504639