首页 > 编程语言 > 详细

前端面试题 -- diff算法与虚拟DOM

时间:2021-08-17 14:27:39      阅读:12      评论:0      收藏:0      [点我收藏+]

REACT的DIFF算法与虚拟DOM

 

  1、什么是虚拟DOM

    VDOM就是js数据结构,用js对象构建一棵虚拟DOM树,VDOM和真实DOM结构之前有一个映射关系

 

  2、原生DOM慢的原因

    浏览器收到一个DOM操作,就会走一遍完整的渲染流程,像计算元素坐标的操作就会浪费掉,因为下次DOM操作可能会改变之前计算的坐标

 

  3、VDOM渲染方式

    利用batching把所有的DOM操作收集起来,一次性提交给真实的DOM,diff算法通过对比新旧虚拟DOM,记录之间的差异

    中心思想:在一个不在render tree的元素统一统计所有操作,再把节点加到render tree上,这样复杂的DOM操作最后就只进行一次layout

 

  4、虚拟DOM的基本步骤

    1、用js对象构建一个虚拟DOM树,然后用虚拟树构建一个真实的DOM树,然后插入到文档中

    2、当状态变更时,重新构建一个新的对象树(还是虚拟DOM树),和旧的对比,记录差异

    3、把差异应用到构建的真实DOM树上,视图更新

 

 

  5、diff算法(基本粒度:标签

    1、传统算法

      对比该节点前后两个节点,若该节点改变,会继续比较该节点的子节点,一层一层对比,循环进行,复杂度就到了n3次方

    2、react算法

      只比较同层次的节点同一个父节点下的所有子节点,分层次),如果发现节点不存在了,就完全删除该节点及其子节点,不进行比较,,只需要对树进行一次遍历,就能把整个DOM树比较。复杂度为n

    3、跨层级操作

      react不会判断出是移动,而是直接销毁,重新创建。再挂在目标的DOM树上,官方也不推荐我们做出跨层级的骚操作

    4、组件之间的比较

      同一类型组件,按照VDOM原策略比较(会update)

      不是同一类型,判断其为脏组件销毁掉,直接替换整个组件下的所有子节点

    5、同一层级根据key在老集合查找是有相同元素,找到后比较进行类型比较,类型不同直接销毁创建,类型相同更新部分内容

 

前端面试题 -- diff算法与虚拟DOM

原文:https://www.cnblogs.com/lijinxiao/p/15151429.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!