大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你!
我们知道,Vue 是基于模板的渲染机制来实现页面的渲染的。
而模板编译的过程,主要包括以下 4 个步骤:
一、解析模板字符串
Vue 将模板字符串解析成 AST(Abstract Syntax Tree)。
此时有朋友会问,这个 AST 到底是个啥呢?AST,全称为抽象语法树,是一种以树状结构表示代码结构的抽象数据模型。对于 Vue 来说,将模板字符串解析成 AST 意味着把 HTML 标签、指令、插值表达式等内容转换成树状的节点结构,每个节点都包含了元素类型、属性、子节点等信息。
看不懂没事,上图。
二、模版静态优化
在编译过程中,Vue.js 会静态地分析整个模板,检测不需要更改的部分,将其优化成静态内容,这些内容不需要在每次重新渲染时都重新生成。
此时又有朋友会问,这里的静态内容长啥样呢?
静态内容就是指模板中那些在整个组件生命周期内都不会改变的部分。
总结来说,静态内容通常长得像:
1、固定文本;
2、固定的 HTML 结构(没有数据绑定或动态指令);
3、不会根据响应式数据发生变化的部分;
这些静态节点在 AST 中会被打上标记,告诉 Vue:”这部分内容是固定的,可以跳过后续的动态更新处理“。
三、渲染函数生成
将 AST 转换成渲染函数。
这个过程包括将每个 AST 节点转换成代码字符串并拼接成渲染函数。
此时又有朋友会问,这里的代码字符串、渲染函数,又分别长啥样呢?
下面直接上图,分别是代码字符串、渲染函数。
四、虚拟DOM生成
将生成的渲染函数执行后,会得到一个 VNode(Virtual DOM 节点)。
此时又有朋友会问,VNode 长啥样呢?
VNode 其实就是一个 js 对象,用来描述一个真实 DOM 元素应该长什么样子。
此时有朋友会说,这不长的和 AST 差不多吗?
确实,从结构上看,AST 和 VNode 都是树形结构,但他们主要区别是关注点不同。
总之,上面这 4 个步骤将模板编译成渲染函数,用于生成 Virtual DOM,并更新到页面中,从而实现页面的渲染。
在每次有数据变化时,Vue.js 会重新调用渲染函数,生成新的 VNode,通过对比新旧 VNode 差异,从而仅仅更新需要更新的部分,提高页面的渲染效率。
好了,今天要分享的内容就是这么多,最后感谢朋友们给个点赞、分享、推荐,拜拜~