Vue template 解析生成真实dom过程

article/2024/12/22 1:48:32

vue的模版编译过程主要如下:template -> ast -> render函数 -> 虚拟DOM -> 真实DOM

  1. 读取模板:Vue 会读取 HTML 模板并将其转换为字符串。

  1. 解析模板:Vue 使用编译器将字符串模板转换为抽象语法树(AST),其中包含模板中的每个元素和它们的属性。

  1. 生成 render 函数:Vue 使用抽象语法树生成 render 函数。

  1. 数据响应:Vue 将数据绑定到 render 函数,并使用 Object.defineProperty 监听数据的变化,在数据更改时重新生成 render 函数。

  1. 虚拟 DOM:Vue 通过 render 函数生成虚拟 DOM,该数据结构是真实 DOM 的内存版本。

  1. 更新 DOM:Vue 通过对比虚拟 DOM 和真实 DOM 的差异,仅更新需要更新的部分,从而生成最终的真实 DOM。

vue 在模版编译版本的码中会执行 compileToFunctions 将template转化为render函数:

// 将模板编译为render函数
const { render, staticRenderFns } = compileToFunctions({template,options//省略
}, this)
复制代码

CompileToFunctions中的主要逻辑如下∶

(1) 调用parse方法将template转化为ast(抽象语法树)

const ast = parse(template.trim(), options)
复制代码
  • parse的目标:把tamplate转换为AST树,它是一种用 JavaScript对象的形式来描述整个模板。

  • 解析过程:利用正则表达式顺序解析模板,当解析到开始标签、闭合标签、文本的时候都会分别执行对应的 回调函数,来达到构造AST树的目的。

AST元素节点总共三种类型:type为1表示普通元素、2为表达式、3为纯文本

(2) 对静态节点做优化

optimize(ast,options)
复制代码

这个过程主要分析出哪些是静态节点,给其打一个标记,为后续更新渲染可以直接跳过静态节点做优化

深度遍历AST,查看每个子树的节点元素是否为静态节点或者静态节点根。如果为静态节点,他们生成的DOM永远不会改变,这对运行时模板更新起到了极大的优化作用。

(3) 生成render函数

const code = generate(ast, options)
复制代码
  • 生成 render 函数的字符串形式

在这一步中,会遍历整个 AST,根据节点类型和属性值,生成一个字符串形式的 render 函数,其中包括 VNode 节点的创建、属性的设置等操作。

  • 将 render 函数字符串转化为函数

将生成的字符串形式的 render 函数,通过 new Function() 的方式转化为真正的函数。在这个过程中,会对 render 函数进行一些优化,比如使用 with 语句将 this 指向 vm 实例,从而提高执行效率。

  • 执行 render 函数生成 VNode

将生成的 render 函数执行,得到一个 VNode 节点,用于渲染视图。

generate将ast抽象语法树编译成 render字符串并将静态部分放到 staticRenderFns 中,最后通过 new Function(`` render``) 生成render函数。

(4) 生成虚拟Dom

render函数的执行过程如下:

  • render函数被调用,传入createElement函数作为参数。

  • 在render函数中,调用createElement函数来创建虚拟DOM节点。

  • 在createElement函数中,根据传入的标签名、属性和子节点,创建一个虚拟DOM节点。

  • 如果子节点是一个字符串,将其转化为文本节点。

  • 如果子节点是一个数组,遍历数组中的每个元素,并递归调用createElement函数来创建子节点。

  • 最终返回一个包含所有子节点的虚拟DOM节点。

// 模板字符
<div>{{message}}
</div>// AST Dom树
{type: "Program",children: [{type: "Tag",tagName: "div",children: [{type: "Expression",expression: "message"}]}]
}// 生成的 render 函数为
function render () {return h('div', [this.message]);
}// 虚拟dom
{tag: 'div',children: [{type: 2,expression: 'message',text: undefined}]
}tag: 节点类型,此处为 'div'
children: 子节点数组,包含了一个文本节点
type: 节点类型,2 代表文本节点
expression: 插值表达式 'message'
text: 未被渲染的文本,因为在渲染的时候需要通过 expression 来获取相应的值,所以为 undefined。复制代码

http://chatgpt.dhexx.cn/article/XebrnuCn.shtml

相关文章

解析ChatGPT背后的工作原理

ChatGPT 是 OpenAI 发布的最新语言模型&#xff0c;比其前身 GPT-3 有显著提升。与许多大型语言模型类似&#xff0c;ChatGPT 能以不同样式、不同目的生成文本&#xff0c;并且在准确度、叙述细节和上下文连贯性上具有更优的表现。它代表了 OpenAI 最新一代的大型语言模型&…

最近大火的chatGPT是什么?它是怎样聊天的?

ChatGPT是一款革命性的聊天机器人软件&#xff0c; ChatGPT&#xff08; ChatGPT AI&#xff0c;聊天机器人欢迎您&#xff01;&#xff09;的核心功能是自动回复&#xff0c;可以根据客户的输入自动生成回复&#xff0c;从而提高客户服务的效率。还可以根据客户的输入自动生成…

ChatGPT 背后的经济账

拿投资和赚钱之前&#xff0c;要先去了解下成本。 来源&#xff1a;OneFlow 原文地址&#xff1a;https://sunyan.substack.com/p/the-economics-of-large-language-models 作者&#xff1a;Sunyan 翻译&#xff1a;杨婷、徐佳渝、贾川 原标题&#xff1a;ChatGPT 背后的经济账…

ChatGPT,背后的核心是什么?

来源&#xff1a;远川科技评论 作者&#xff1a;钟靖怡 马冰莹 编辑&#xff1a;董指导 2022年12月份的时候&#xff0c;ChatGPT还只是个被人各种撩的聊天工具。但进入2023年后&#xff0c;已经向着效率工具迈进了。 微软宣布正和ChatGPT开发团队OpenAI进行洽谈&#xff0c;投资…

最近大火的ChatGpt,到底给我们带来了哪些改变?

我相信最近大家都有听说这个ChatGpt了吧&#xff01; 即使没有听说过也没有关系&#xff0c;我来给大家掰扯掰扯。 OpenAI公司推出了一款名为ChatGPT的人工智能聊天机器人&#xff0c;该技术通过利用大量训练数据&#xff0c;实现了人类般的自然语言处理能力&#xff0c;并能…

探索ChatGPT背后的网络基础设施

ChatGPT是OpenAI公司开发的一款聊天机器人应用&#xff0c;自2022年11月推出以来以迅雷不及掩耳盗铃之势火爆全球。ChatGPT不仅可以模仿人类对话&#xff0c;还可以创建音乐、电视剧、童话故事和学生论文&#xff0c;甚至是编写和调试计算机程序。 截至2023年1月&#xff0c;C…

Stable Diffusion、ChatGPT爆火的背后!

整编 | Carol 参考 |《AIGC 发展趋势报告 2023》 出品 | AI科技大本营 “Generative AI&#xff08;生成式AI&#xff09;有什么社会价值&#xff1f;” 当腾讯研究院的研究员将上面这个问题输入到ChatGPT中&#xff0c;得到如下回复&#xff1a; "生成式AI是一种人工智能…

ChatGPT最近大火?教你实现破产版ChatGPT(一)数据预处理

目录 一.前言 二.下载数据文件 三.导包并设置使用GPU 四.加载和预处理数据 五.为模型准备数据 一.前言 最近ChatGPT大火&#xff0c;成功破圈&#xff0c;到底是个啥&#xff1f; 简单说&#xff0c;它是一个模型&#xff0c;一个语言模型&#xff01;它是以对话方式与人进…

爆火的ChatGPT 背后的大模型与大数据创新

最近&#xff0c;ChatGPT 迅速引爆 AIGC 领域&#xff0c;依托全网大数据与海量智能模型训练&#xff0c;一举成为 Stable Diffusion 之外的 AI 新宠。不同于过往初阶聊天机器人&#xff0c;这位“懂王”似乎可以取代大型搜索平台&#xff0c;与用户展开高质量同频对话。网友也…

ChatGPT背后有哪些关键技术?CSIG企业行带你一探究竟

目录 1 ChatGPT的时代2 CSIG企业行3 议题&嘉宾介绍3.1 对生成式人工智能的思考3.2 对话式大型语言模型研究3.3 文档图像处理中的底层视觉技术 4 观看入口 1 ChatGPT的时代 2015年&#xff0c;马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合…

ChatGPT背后的模型三兄弟

ChatGPT作为最接近强人工智能的系统&#xff0c;具有强大的信息理解和信息抽象总结能力&#xff0c;在这个信息过剩的时代&#xff0c;为我们提供了一个非常好的智能辅助工具。在我们日常的工作中&#xff0c;怎么充分的利用ChatGPT等类似的智能系统&#xff0c;会给我们生活和…

ChatGPT火爆,背后的核心到底是什么?

点击上方“小麦大叔”&#xff0c;选择“置顶/星标公众号” 福利干货&#xff0c;第一时间送达 2022年12月份的时候&#xff0c;ChatGPT还只是个被人各种撩的聊天工具。但进入2023年后&#xff0c;已经向着效率工具迈进了。 微软宣布正和ChatGPT开发团队OpenAI进行洽谈&#xf…

ChatGPT背后的模型

文章目录 1.RLHF方法2.ChatGPT中的RLHF方法2.1 微调模型GPT-32.2 训练奖励模型2.3 利用强化学习进一步微调语言模型 3.效果4.面临挑战5.参考 InstructGPT语言模型&#xff0c;是一个比 GPT-3 更善于遵循用户意图&#xff0c;同时使用通过我们的对齐研究开发的技术使它们更真实、…

ChatGPT既然这么火,有没有弊端呢?

介绍 在现代社会中&#xff0c;人们越来越依赖技术来解决问题。聊天机器人是一种最新的技术趋势&#xff0c;这种技术可以为人们带来很多便利。而ChatGPT聊天机器人则是其中的一种&#xff0c;它使用了大型的语言模型GPT&#xff08;Generative Pre-trained Transformer&#…

突发!ChatGPT疯了!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 今天&#xff0c;笔者正常登录ChatGPT&#xff0c;试图调戏一下他。但是&#xff0c;突然震惊的发现&#xff0c;ChatGPT居然疯了。 之所以说他是疯了&#xff0c;而不是崩溃了&#xff0c;是因为他还能回复我&#xff0c;但…

ChatGPT背后的逻辑

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl OpenAI与ChatGPT OpenAI是一个美国的人工智能&#xff08;AI&#xff09;研究实验室&#xff0c;由非营利组织OpenAI Incorporated和其盈利子公司OpenAI Limited Partnersh…

ChatGPT爆火网络背后的故事?

文章目录 前言一、ChatGPT的诞生背景二、ChatGPT的技术原理三、ChatGPT的推广策略四、ChatGPT的未来展望五、橙子送书第2期 前言 ChatGPT是一款基于人工智能技术的聊天机器人&#xff0c;它的出现引起了广泛的关注和热议。在短短的时间内&#xff0c;ChatGPT就成为了全球范围内…

ChatGPT 用户破亿背后...

2022 年 12 月初&#xff0c;ChatGPT 被社会广泛讨论之初&#xff0c;我们就介绍了 ChatGPT 母公司 OpenAI 使用了身份云&#xff08;IDaaS&#xff09;服务。在当时&#xff0c;人们还在感慨 ChatGPT 上线不到一周时间用户量就突破百万&#xff0c;而仅仅在不到两个月后&#…

ChatGPT背后的经济账

ChatGPT能否取代Google、百度这样的传统搜索引擎&#xff1f;为什么中国不能很快做出ChatGPT&#xff1f;当前&#xff0c;对这些问题的探讨大多囿于大型语言模型&#xff08;LLM&#xff09;的技术可行性&#xff0c;忽略或者非常粗糙地估计了实现这些目标背后的经济成本&…

ChatGPT是风口吗?爆火后的质疑猝不及防

作者观&#xff1a; 首先要明确一点&#xff0c;ChatGPT代替不了人类&#xff0c;不要抱不切实际的期望。 作为一款由OpenAI开发的人工智能聊天软件&#xff0c;该程序在一些人的眼里具有革命性的意义。 有人说&#xff0c;这玩意儿可以在一夜之间让无数人失业&#xff0c;也有…