当前位置: 首页 > news >正文

Vue template到render过程,以及render的调用时机

Vue template到render过程

  • vue的模版编译过程主要如下:template -> ast -> render函数
  • (1)调用parse方法将template转化为ast(抽象语法树)
  • (2)对静态节点做优化
  • (3)生成代码
  • render函数的调用时机

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

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

// 将模板编译为render函数
const { render, staticRenderFns } = compileToFunctions(template,options, this)

CompileToFunctions中的主要逻辑如下∶

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

constast = parse(template.trim(), options)

parse的目标:把tamplate转换为AST树,它是一种用 JavaScript对象的形式来描述整个模板。
解析过程:利用正则表达式顺序解析模板,当解析到开始标签、闭合标签、文本的时候都会分别执行对应的 回调函数,来达到构造AST树的目的。
AST元素节点总共三种类型:type为1表示普通元素、2为表达式、3为纯文本

(2)对静态节点做优化

optimize(ast,options)

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

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

(3)生成代码

const code = generate(ast, options)

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

render函数的调用时机

在beforeMount生命周期钩子期间调用,因为此时,模板编译已完成,但是为渲染成真实DOM

http://www.lryc.cn/news/317288.html

相关文章:

  • 阿里云服务器Ngnix配置SSL证书开启HTTPS访问
  • 12 list的使用
  • 控件交互与视图交互的区别
  • 打包 加載AB包 webGl TextMeshPro 變紫色的原因
  • 美易官方:去年全球企业派息1.66万亿美元创新高
  • 基于Springboot的面向智慧教育的实习实践系统设计与实现(有报告)。Javaee项目,springboot项目。
  • 【数据库-黑马笔记】基础-SQL
  • MySQL性能分析:性能模式和慢查询日志的使用
  • 【哈希表算法题记录】15. 三数之和,18. 四数之和——双指针法
  • 代码随想录算法训练营Day44 ||leetCode 完全背包 || 518. 零钱兑换 II || 377. 组合总和 Ⅳ
  • RabbitMQ发布确认高级版
  • 【阿里云系列】-基于云效构建部署Springboot项目到ACK
  • PyTorch搭建LeNet训练集详细实现
  • R语言复现:中国Charls数据库一篇现况调查论文的缺失数据填补方法
  • 解决Git:Author identity unknown Please tell me who you are.
  • Flink StreamTask启动和执行源码分析
  • 【MySQL 系列】MySQL 语句篇_DCL 语句
  • 什么是序列化?为什么需要序列化?
  • Linux本地搭建FastDFS系统
  • docker和docker-compose安装
  • 深入理解Spring的ApplicationContext:案例详解与应用
  • 6.Java并发编程—深入剖析Java Executors:探索创建线程的5种神奇方式
  • 英语阅读挑战
  • 备战蓝桥之思维
  • 09 string的实现
  • Git 进行版本控制时,配置 user.name 和 user.email
  • 传统开发读写优化与HBase
  • 【OpenGL实现 03】纹理贴图原理和实现
  • FDU 2021 | 二叉树关键节点的个数
  • 精读《React Conf 2019 - Day2》