内容简介:简述一下Vue.js的template编译过程?先上一张图大致看一下整个流程
20190215问
简述一下Vue.js的template编译过程?
先上一张图大致看一下整个流程
从上图中我们可以看到compile是从mount后开始进行中, 整体逻辑分为三个部分
- 解析器(parse) - 将
模板字符串转换成element ASTs - 优化器(optimize) - 对
AST进行静态节点标记,主要用来做虚拟DOM的渲染优化 - 代码生成器(generate) - 使用
element ASTs生成render函数代码字符串
开始前先解释一下AST
AST(abstract syntax tree 抽象语法树), 是源代码的抽象语法结构的树状表现形式
从代码上简单理解一下
<div class="name">JS每日一题</div>
//转成AST后会得到如下格式
[
{
"type": "tag",
"name": "div",
"attribs": {
"class": "name"
},
"children": [
{
"data": "JS每日一题",
"type": "text",
"next": null,
"startIndex": 18,
"prev": null,
"parent": "[Circular ~.0]",
"endIndex": 24
}
],
"next": null,
"startIndex": 0,
"prev": null,
"parent": null,
"endIndex": 30
}
]
AST会经过generate得到render函数,render的返回值是VNode, VNode的源码可以见 https://github.com/vuejs/vue/...
#### 解析器(parse)
源码地址 https://github.com/vuejs/vue/...
parse 的目标是把 template 模板字符串转换成 AST 树,它是一种用 JavaScript 对象的形式来描述整个模板。那么整个 parse 的过程是利用正则表达式顺序解析模板,当解析到开始标签、闭合标签、文本的时候都会分别执行对应的回调函数,来达到构造 AST 树的目的
优化器(optimize)
源码地址 https://github.com/vuejs/vue/...
通过 optimize 把整个 AST 树中的每一个 AST 元素节点标记了 static 和 staticRoot, optimize 的过程,就是深度遍历这个 AST 树,去检测它的每一颗子树是不是静态节点,如果是静态节点则它们生成 DOM 永远不需要改变
代码生成器(generate)
把优化后的 AST 树转换成可执行的代码
总结
首先通过parse将template解析成AST,其次optimize对解析出来的AST进行标记,最后generate将优化后的AST转换成可执行的代码
关于JS每日一题
JS每日一题可以看成是一个语音答题社区
每天利用碎片时间采用60秒内的语音形式来完成当天的考题
群主在次日0点推送当天的参考答案
- 注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路
以上所述就是小编给大家介绍的《JS每日一题:简述一下Vue.js的template编译过程?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法导论(原书第3版)
Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein / 殷建平、徐云、王刚、刘晓光、苏明、邹恒明、王宏志 / 机械工业出版社 / 2012-12 / 128.00元
在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 全书选材经典、内容丰富、结构合理、逻辑清晰,对本科......一起来看看 《算法导论(原书第3版)》 这本书的介绍吧!