# 如何理解Vue中模板编译原理
问题核心:如何将template转换成render函数 ?
1.将template模板转换成ast语法树 - parserHTML
2.对静态语法做静态标记 - markUp diff来做优化的 静态节点跳过diff操作
3.重新生成代码 - codeGen
src/compiler/index.js:11
export const createCompiler = createCompilerCreator(function baseCompile (
template: string,
options: CompilerOptions
): CompiledResult {
const ast = parse(template.trim(), options) // 1.解析ast语法树
if (options.optimize !== false) {
optimize(ast, options) // 2.对ast树进行标记,标记静态节点
}
const code = generate(ast, options) // 3.生成代码
return {
ast,
render: code.render,
staticRenderFns: code.staticRenderFns
}
})