返回信息流虚拟Dom用了改进的Diff算法只修改一部分元素
但是看了个源码的帖子,底层也是对Dom的增删改,就是算法后应该改变的元素进行dom操作
想问 如果普通的效果不好是因为修改dom会导致大部分元素reflow,那Diff以后某些元素的增删不会触发其他元素的reflow吗??
这是一条镜像帖。来源:北邮人论坛 / www-technology / #36105同步于 2016/5/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
求问虚拟Dom和普通的区别
xssd
2016/5/9镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
虚拟dom 指的应该是树形的数据结构吧,用js模拟了一个dom树。
感觉就是在 dom树和Virtual DOM 里面加了一层缓存。类比CPU和硬盘,CPU是只操作内存。
步骤应该是
1。js模拟表示dom树
2。state变更时候,生成新的虚拟dom树,比较两颗dom树。记录差异
3。 将差异渲染到真实的dom上。
至于是否会reflow,有差异则更新,无差异则不更新。
关键点在于。框架会一次把最终形态给映射出来,而完全忽略了中间的过程。
类似于用DocumentFragment批量修改可以优化dom操作这样吗
【 在 dcy0701 的大作中提到: 】
: 虚拟dom 指的应该是树形的数据结构吧,用js模拟了一个dom树。
: 感觉就是在 dom树和Virtual DOM 里面加了一层缓存。类比CPU和硬盘,CPU是只操作内存。
: 步骤应该是
: ...................
一个影响子元素一个影响后面的元素??
不知道。。
【 在 rhj1122 的大作中提到: 】
: 减少也是一种优化
: appendChild和insertBefore有什么有哪些不同呢
当然可以,但是并不能改变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操作这样吗
:
懂啦~ 非常感谢~!
【 在 dcy0701 的大作中提到: 】
: 当然可以,但是并不能改变dom本身操作慢的问题。
: virtual dom也不可能改变dom本身慢的问题
:
: ...................