浅学虚拟Dom和diff

基础

     众所周知,Dom操作是非常耗费性能的,以前用JQuery可以自行控制dom操作的时机,而vue和react都是数据驱动视图,该如何有效控制dom操作?
     出现了vdom,用js模拟don结构,计算出最小的变更去操作dom。模拟如下:
在这里插入图片描述

通过snabbdom学习vdom

     snabbdom是一个简洁强大的vdom的库,Vue参考它实现的vdom和diff。我们用github上snabbdom的例子来学习vdom:
在这里插入图片描述
     通过新旧vnode对比,得出最小的更新范围,最后更新dom。

diff算法

diff算法是vdom中最核心、最关键的部分。也能在vue、react、日常使用中体现出来。
在这里插入图片描述

在这里插入图片描述
时间复杂度为O(n^3), 不可用。
经过前辈的努力将时间复杂度优化到O(n):
在这里插入图片描述

patch函数

key和sel都相等,则不进行比较,优化

  • key和sel都相等,则不进行比较,优化
    不相等则删掉重建,优化
  • 不相等则删掉重建,优化

patchVnode函数

在这里插入图片描述

updateChild

updateChild使用时机

     当patchVnode时,如果新旧node都有Child时,就会进行updateChild:
根据key进行移动,不用销毁重新

虚拟DOM的作用

  • 兼容性好。因为Vnode本质是JS对象,所以不管Node还是浏览器环境,都可以操作;
  • 减少了对Dom的操作。页面中的数据和状态变化,都通过Vnode对比,只需要在比对完之后更新DOM,不需要频繁操作,提高了页面性能;

那么虚拟DOM和真实DOM的区别

  • 虚拟DOM不会进行回流和重绘;
  • 真实DOM在频繁操作时引发的回流重绘导致性能很低;
  • 虚拟DOM频繁修改,然后一次性对比差异并修改真实DOM,最后进行依次回流重绘,减少了真实DOM中多次回流重绘引起的性能损耗;
  • 虚拟DOM有效降低大面积的重绘与排版,因为是和真实DOM对比,更新差异部分,所以只渲染局部;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值