首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Vue3diff算法原理和优化

Vue.js通过编译将template 模板转换成渲染函数(render ) ,执行渲染函数就可以得到一个虚拟节点树 VNode 虚拟节点:它可以代表一个真实的 dom 节点。...简单来说,可以把Virtual DOM 理解为一个简单的JS对象,并且最少包含标签名( tag)、属性(attrs)和子元素对象( children)三个属性。...dom是昂贵的,昂贵的一方面在dom本身的重量,dom节点在js里的描述是个非常复杂属性很多原型很长的超级对象,另一方面是浏览器渲染进程和js进程是独立分离的,操作dom时的通信和浏览器本身需要重绘的时耗都是很高的...所以大家机智的搞了个轻量的vdom去模拟dom,vdom每个节点都只挂载js操作的必要属性,每次组件update时都先操作vdom,通过vdom的比对,得到一个真实dom的需要操作的集合。...anchor, parentComponent, parentSuspense, isSVG

1.6K10

第五篇:组件更新:完整的 DOM diff 流程是怎样的?(下)

递归执行 patch 更新节点 patch(n1, n2, container, parentAnchor, parentComponent, parentSuspense, isSVG...实现代码如下: const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG...我们知道了子节点更新调用的是 patch 方法, Vue.js 正是通过这种递归的方式完成了整个组件树的更新。 核心 diff 算法中最复杂就是求解最长递增子序列,下面我们再来详细学习一下这个算法。...最长递增子序列 求解最长递增子序列是一道经典的算法题,多数解法是使用动态规划的思想,算法的时间复杂度是 O(n2),而 Vue.js 内部使用的是维基百科提供的一套“贪心 + 二分查找”的算法,贪心算法的时间复杂度是...总结 这两节课我们主要分析了组件的更新流程,知道了 Vue.js 的更新粒度是组件级别的,并且 Vue.js 在 patch 某个组件的时候,如果遇到组件这类抽象节点,在某些条件下也会触发子组件的更新。

5100

写给小白(自己)的vue3源码导读!

在 Vue.js 的官网中,也是花了大篇幅来介绍什么是组件,如何编写组件以及组件拥有的属性和特性。...*/)) ], 64 /* STABLE_FRAGMENT */)) } } 而render 函数执行的结果就应该是一个vdom Virtual DOM Virtual DOM 他就是个js...的目的不是为了性能,而是为了跨平台,所以,当页面大量的内容更新的时候性能就没法保证,就需要有一种算法来减小DOM操作的性能开销 市面上的diff 算法基本原理的核心是Diff同层对比,不做跨层级对比,这样能大大减少js...在我们vue 编译中,就是个js 对象 比如如下模板: hello World!...\n\n" } } 如果有兴趣可以去 AST explorer 可以在线看到不同的 parser 解析 js 代码后得到的 AST。

1.2K11

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券