★认识虚拟DOM
数据改变 -> 虚拟DOM(计算变更)【JS浏览器的V8引擎,执行js速度是很快的,比直接操作DOM快很多】 操作真实DOM -> 视图更新
虚拟DOM 就是用JS去模拟DOM
★虚拟DOM的好处
好处1:减少对真实DOM的操作
通过比较变化,计算最小的需要更新的视图,然后再去操作DOM
好处2:跨平台
虚拟 DOM 本质上是 JavaScript 对象,可以跨平台,例如服务器渲染、Weex 开发等。
snabbdom 虚拟DOM库
A virtual DOM library with focus on simplicity, modularity, powerful features and performance.
【一个虚拟DOM库,关注简单性、模块性、强大功能和性能】
★认识DIFF算法
DIFF算法:
- 1.遍历老虚拟DOM
- 2.遍历新虚拟DOM
- 3.重新排序
但是如果1000个结点的话,就要计算1000^3,1000 000 000 次, 所以vue react中对DIFF算法进行了优化
vue react优化DIFF算法
1.比较同一个层级
只比较同一个层级,不跨级比较,简化比较次数,
2.比较标签名
如果标签名不同,直接删除,不继续深度比较
3.比较key
标签名相同的时候,看key是否相同,这就是v-for的时候加key值, key相同的话就是相同结点,不会再深度比较了
★ # 深度剖析:如何实现一个 Virtual DOM 算法
★key的作用
为什么v-for里面需要写key,自己写的li标签不需要写key
自己的理解 如下: “因为v-for的时候,vue或react采用了虚拟DOM进行渲染,而虚拟DOM主要就是DIFF算法, 其中VUE优化了DIFF算法,分别是层级比较,标签比较,还有就是我们说的key比较,所以v-for中需要写key,而自己写的li标签,就直接渲染DOM了,没有使用虚拟DOM,所以不需要写key”
★v-for的作用
遍历数组
v-for="(item,index) in array" :key="item.id"
遍历对象
v-for="(value,key,index) in Object" :key="key"
v-if v-for
v-for的执行优先级比v-if高,所以不能再同一个标签内使用