vue dom diff,virtual dom diff算法_1

  vue dom diff,virtual dom diff算法

  本文主要详细介绍Vue的虚拟DOM和diff算法。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  

目录

  什么是虚拟DOM?为什么需要虚拟DOM?摘要在vue 中

  数据更改-虚拟DOM(计算更改)-操作DOM-视图更新

  虚拟DOM: JS执行速度更快。

  

什么是虚拟DOM?

  用JS模拟DOM结构

  

为什么需要虚拟DOM?

  vue中的数据驱动视图需要有效的方法来控制DOM操作的数量。

  diff算法:虚拟DOM的核心

  补丁功能

  两个使用场景:

  第一次渲染时,判断第一个参数是否是真实的dom元素,如果是,创建一个空的vnode并关联一个DOM元素,然后比较patch函数传入的第一个参数和第二个参数是否是同一个vnode。如果是同一个vnode,直接给vnode打补丁更新。如果是不同的VNode,创建一个新的DOM元素,插入它,然后删除旧的。

  patchVnode函数:

  updateChildren函数:

  DOM Diff

  比较两个虚拟节点,找出它们的区别,然后给真实的DOM节点打补丁。

  目的:以最小的代价修改DOM

  虚拟节点:用对象表示真实的DOM。

  定义属性和代理之间的区别:

  性质不同,所以用途不同。

  defineProperty的本质是给对象添加属性,所以当数组的长度被修改,数组的值被index设置时,数组的push()和pop()不能被触发。

  defineProperty中集合的。所以Vue2是用一些自己定义的数组方法来实现的。

  代理没有这个缺点。

  Vue2之所以不用proxy,是因为Proxy属于ES6,当时考虑的是兼容性。

  Reflect反映内置对象方法集合的容器。

  Reflect 的好处:

  以前很多方法都是挂在Object上的,很混乱。

  以后很多方法会逐渐放到Reflect上,成为内置方法的容器,统一管理各类方法。

  Reflect.has(obj, a) //函数式编程。

  比较obj中的a

  Object中的一些方法会直接抛出异常,需要包装try catch。

  Reflect中的方法一般都有返回值,失败后会合理返回。

  proxyhandler和Reflect Proxy中的方法是一一对应的。

  Reflect是ES6中的一个全局内置对象。直接保存的静态方法,不需要实例化,可以直接使用。

  

总结

  本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: