vuejs源码之模版编译原理

news/2024/11/27 21:54:28/

之前我们说过虚拟dom,也就是虚拟dom拿到vnode后所做的事情,而模版编译是如何让虚拟dom拿到vnode。

模版编译的目标就是生成渲染函数,而渲染函数的作用是每次执行它,它就会使用当前最新的状态生成一份新的vnode,然后用这个vnode进行渲染。

将模版编译成渲染函数

将模版编译成渲染函数可以分为2个步骤,先将模版解析生成AST,也就是抽象语法树,然后再使用AST生成渲染函数。

由于静态节点不用重新渲染,所以生成AST的时候会给静态节点做一个标记,这样在虚拟DOM中更新节点时,如果发现有这个标记,就不会重新渲染它。

解析器

解析器的作用就是将模版解析生成AST。

在解析器内部有很多小解析器,其中包括过滤器解析器,文本解析器和html解析器。

在使用模版时,我们可以使用过滤器,而过滤器解析器的作用就是用来解析过滤器的。

文本解析器就是用来解析带变量的文本。

最重要的就是html解析器,它的作用就是解析模版,每当解析到html标签到开始位置,结束位置,文本或者注释时,都会触发钩子函数,然后将相关信息通过参数传递出来。

优化器

优化器的目标是遍历AST,检测出所有静态子树并给其打上标记。

代码生成器

这个是模版编译的最后一步,它的作用是将AST转换成渲染函数中的内容,这个内容可以称为代码字符串。

比如

<div id="app"><p title="berwin" @click="c">1</p>
</div>

生成后的代码字符串是下面这个样子。

with(this){return _c('div',{attrs:{"id":"app"}},[_c('p',{attrs:{"title":"berwin"},on:{"click":c}},[_v("1")])])}

里面通过generate函数实现的,源码是在下面这个位置。

生成后的代码字符串导出到外界使用,会将代码字符串放到函数里,这个函数叫做渲染函数。


http://www.ppmy.cn/news/979270.html

相关文章

RocketMQ集成Springboot --Chapter3

RocketMQ实现顺序消息 实际开发中如果没有顺序消费的必要需求&#xff0c;不建议使用顺序消费&#xff0c;顺序消费是单线程的效率比较低。 代码示例 -------生产者 生产者主要设置队列选择器在里面写选择队列的逻辑&#xff0c;通过取模进行选取&#xff0c; rocketMQTempla…

easyExcel单元格换行

1、单元格数据样例&#xff1a; 你好\r\n大家好\r\n 2、增加单元格拦截器 /*** excel换行符处理*/ Slf4j public class WrapCellWriteHandler implements CellWriteHandler {Overridepublic void afterCellDispose(CellWriteHandlerContext context) {Cell cell context.get…

WPF中Binding使用StringFormat格式化字符串方法

货币格式 <TextBlock Text"{Binding Price, StringFormat{}{0:C}}" /> // $123.46货币格式&#xff0c;一位小数 <TextBox Text"{Binding Price, StringFormat{}{0:C1}}" /> // $123.5前文字 <TextBox Text"{Binding Price, String…

istio安装部署总结

istio安装部署总结 大纲 istio基础概念版本选择安装istio核心主件卸载istiokiali安装 istio基础概念 https://istio.io/latest/zh/docs/ 中文文档 istio是一个服务治理平台&#xff0c;治理服务间的访问&#xff0c;&#xff08;例如流量控制&#xff0c;安全策略&#xf…

c语言sizeof运算符的理解和使用

文章目录 1 sizeof作用2 sizeof使用形式3 sizeof使用示例3.1 基本数据类型3.2 变量3.3 指针变量3.4 数组3.5 结构体3.6 联合体 >>返回总目录<< 1 sizeof作用 sizeof是C语言的一种单目操作符&#xff0c;如C语言的其他操作符、–等。它并不是函数。sizeof操作符以…

详解CMakeLists.txt

在前一篇文章 esp32 初识 cmake 构建工具 中&#xff0c;已经用"hellow world"程序介绍了cmake最基本的用法&#xff0c;今天详细讲解CMakeLists.txt文件。 CMakeLists.txt CMakeLists.txt文件是CMake构建工具的核心配置文件。它包含了构建项目所需的一系列指令和参…

深度学习(一)

目录 一、特征工程的作用 二、深度学习的应用 三、得分函数 四、损失函数 五、前向传播 六、反向传播 一、特征工程的作用 数据特征决定了模型的上限预处理和特征提取是最核心的算法与参数选择决定了如何逼近这个上限 二、深度学习的应用 无人驾驶人脸识别分辨率重构 深…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)六:后台主页功能实现下

一、本章内容 接上一章,继续实现后端主页内容,主要实现工具栏对应相关内容的实现,包括系统消息、系统公告、全屏切换、语言切换、主题切换等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管理系统合集…