当前位置:首页 > 软件开放 > 正文内容

vue源码全方位解析百度云(vue源码分析视频教程)

软件开放2年前 (2023-02-14)971

本篇文章给大家谈谈vue源码全方位解析百度云,以及vue源码分析视频教程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

【面试题解析】从 Vue 源码分析 key 的作用

最近看了面试题中有一个这样的题, v-for 为什么要绑定 key?

Vue 中 key 很多人都弄不清楚有什么作用,甚至还有些人认为不绑定 key 就会报错。

其实没绑定 key 的话,Vue 还是可以正常运行的,报警告是因为没通过 Eslint 的检查。

接下来将通过源码一步步分析这个 key 的作用。

Virtual DOM 最主要保留了 DOM 元素的层级关系和一些基本属性,本质上就是一个 JS 对象。相对于真实的 DOM,Virtual DOM 更简单,操作起来速度更快。

如果需要改变 DOM,则会通过新旧 Virtual DOM 对比,找出需要修改的节点进行真实的 DOM 操作,从而减小性能消耗。

传统的 Diff 算法需要遍历一个树的每个节点,与另一棵树的每个节点对比,时间复杂度为 O(n²)。

Vue 采用的 Diff 算法则通过逐级对比,大大降低了复杂性,时间复杂度为 O(n)。

VNode 更新首先会经过 patch 函数, patch 函数源码如下:

vnode 表示更新后的节点,oldVnode 表示更新前的节点,通过对比新旧节点进行操作。

1、vnode 未定义,oldVnode 存在则触发 destroy 的钩子函数

2、oldVnode 未定义,则根据 vnode 创建新的元素

3、oldVnode 不为真实元素并且 oldVnode 与 vnode 为同一节点,则会调用 patchVnode 触发更新

4、oldVnode 为真实元素或者 oldVnode 与 vnode 不是同一节点,另做处理

接下来会进入 patchVnode 函数,源码如下:

1、vnode 的 text 不存在,则会比对 oldVnode 与 vnode 的 children 节点进行更新操作

2、vnode 的 text 存在,则会修改 DOM 节点的 text

接下来在 updateChildren 函数内就可以看到 key 的用处。

key 的作用主要是给 VNode 添加唯一标识,通过这个 key,可以更快找到新旧 VNode 的变化,从而进一步操作。

key 的作用主要表现在以下这段源码中。

updateChildren 过程为:

1、分别用两个指针(startIndex, endIndex)表示 oldCh 和 newCh 的头尾节点

2、对指针所对应的节点做一个两两比较,判断是否属于同一节点

3、如果4种比较都没有匹配,那么判断是否有 key,有 key 就会用 key 去做一个比较;无 key 则会通过遍历的形式进行比较

4、比较的过程中,指针往中间靠,当有一个 startIndex endIndex,则表示有一个已经遍历完了,比较结束

从 VNode 的渲染过程可以得知,Vue 的 Diff 算法先进行的是同级比较,然后再比较子节点。

子节点比较会通过 startIndex、endIndex 两个指针进行两两比较,再通过 key 比对子节点。如果没设置 key,则会通过遍历的方式匹配节点,增加性能消耗。

所以不绑定 key 并不会有问题,绑定 key 之后在性能上有一定的提升。

综上,key 主要是应用在 Diff 算法中,作用是为了更快速定位出相同的新旧节点,尽量减少 DOM 的创建和销毁的操作。

希望以上内容能够对各位小伙伴有所帮助,祝大家面试顺利。

Vue 的文档中对 key 的说明如下:

关于就地修改,关键在于 sameVnode 的实现,源码如下:

可以看出,当 key 未绑定时,主要通过元素的标签等进行判断,在 updateChildren 内会将 oldStartVnode 与 newStartVnode 判断为同一节点。

如果 VNode 中只包含了文本节点,在 patchVnode 中可以直接替换文本节点,而不需要移动节点的位置,确实在不绑定 key 的情况下效率要高一丢丢。

某些情况下不绑定 key 的效率更高,那为什么大部分Eslint的规则还是要求绑定 key 呢?

因为在实际项目中,大多数情况下 v-for 的节点内并不只有文本节点,那么 VNode 的字节点就要进行销毁和创建的操作。

相比替换文本带来的一丢丢提升,这部分会消耗更多的性能,得不偿失。

了解了就地修改,那么我们在一些简单节点上可以选择不绑定 key,从而提高性能。

如果你喜欢我的文章,希望可以关注一下我的公众号【前端develop】

Vue3入口文件解析

vue作为渐进式的前端框架,当我们仅仅在H5页面中轻量引入的时候会这样写:

const { createApp, reactive} = Vue;

那么我们是如何导出这些对象的呢?让我们来看一下 vue.global.js 文件源码:

看懂了这个函数,其实也就明白了我们是怎么获取到对象的,这其实是一个 立即加载函数 。

手把手教你读Vue2源码-2

在上一篇中,我们已经学习了怎么搭建环境和查找入口文件、vue初始化方法

这一篇,我们就来学习基本的调试方法,在上篇中,我们已经在test文件夹中创建了一个测试文件,我们在浏览器中打开这个文件

1. 初始化new Vue()

test1.html文件中在初始化app处打断点,按F11走下一步查看,可以看到进入到我们Vue构造函数,调用了init方法

2. this.init(options)

同样打上断点,点击下一步,会进入init方法

3. this.initMixin

在init方法,初始化了各种属性。我们将断点打在合并options的位置,查看一下options合并前后有什么差别:

4. $mount

继续,将断点打到mount方法

5. mountComponent

声明了updateComponent,创建了Watcher

6. _render()

_render获取虚拟dom

7. _update()

_update把虚拟dom转为真实dom

关于vue源码全方位解析百度云和vue源码分析视频教程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

扫描二维码推送至手机访问。

版权声明:本文由飞速云SEO网络优化推广发布,如需转载请注明出处。

本文链接:http://muyuzhen.com/post/8385.html

分享给朋友:

“vue源码全方位解析百度云(vue源码分析视频教程)” 的相关文章

东莞软件开发(东莞软件企业)

东莞软件开发(东莞软件企业)

本篇文章给大家谈谈东莞软件开发,以及东莞软件企业对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、app开发公司哪家好一点? 2、东莞APP软件开发多少钱 3、东莞软件开发公司哪家好? 4、东莞做ERP软件的有那些公司? 5、东莞市汉方软件开发有限公司怎么样...

木马软件怎么盗取通讯录(木马软件怎么盗取通讯录信息)

木马软件怎么盗取通讯录(木马软件怎么盗取通讯录信息)

本篇文章给大家谈谈木马软件怎么盗取通讯录,以及木马软件怎么盗取通讯录信息对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、手机微信扫描二维码木马病毒,通讯录信息会被盗吗 2、现在骗子通过一个软件能把手机上全部号码盗走吗 3、诈骗软件能获取微信通讯录 4、当心手机...

发行数字藏品需要什么手续(数字藏品能升值吗)

发行数字藏品需要什么手续(数字藏品能升值吗)

本篇文章给大家谈谈发行数字藏品需要什么手续,以及数字藏品能升值吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、数字藏品怎么制作 2、朋友支招怎么做数字藏品? 3、数字藏品银行申请流程 4、用稀台元宇宙saas经营数字藏品需要具备什么资质? 5、国家支持数...

朋友圈引流推广文案(朋友圈引流推广文案)

朋友圈引流推广文案(朋友圈引流推广文案)

今天给各位分享朋友圈引流推广文案的知识,其中也会对朋友圈引流推广文案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、我想请问一下怎么做引流?有那些可以帮助推广的平台呢? 2、餐饮店如何引流与推广 3、餐饮店如何引流与推广? 4、微商引流精准 微商...

产品追溯二维码怎么查询(产品追溯二维码怎么查询进度)

产品追溯二维码怎么查询(产品追溯二维码怎么查询进度)

今天给各位分享产品追溯二维码怎么查询的知识,其中也会对产品追溯二维码怎么查询进度进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、圣元奶粉怎么查追溯码,圣元官网追溯码查询 2、二维码是怎么实现商品追溯管理 3、猪肉溯源码怎么查 4、喜宝奶粉溯源码如...

好大学在线网站官网(好大学在线是什么)

好大学在线网站官网(好大学在线是什么)

今天给各位分享好大学在线网站官网的知识,其中也会对好大学在线是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、好大学在线是免费的吗 2、线上教学平台有哪些 3、好大学在线小程序怎么登录 好大学在线是免费的吗 好大学在线”免费提供的平台及课程服务...