虚拟DOM

VNode:用Js计算性能来换取操作真实Dom所消耗的性能。

● 当数据发生变化时,生成真实dom对应的虚拟dom节点,跟本地缓存的虚拟dom进行对比,找出差异所在,然后将差异更新到真实dom上,可以最小程度的减少操作dom。对比新旧VNode找出差异的过程------DOM-Diff(核心所在)。

Dom-Diff 的过程也叫:patch, 即对旧的虚拟dom修补,得到新的虚拟dom。以新的VNode为基准,改造oldVNode使之成为跟新的VNode一样。

● 模板编译

template----->render函数   ☆  ☆  借用ast语法树

包含过程:模板解析,优化阶段,代码生成阶段。

1、模板解析:将一堆模板字符串用正则等方式解析成抽象语法树AST;

2、优化阶段:遍历AST,找出其中的静态节点,并打上标记;

 

3、代码生成:将AST转换成渲染函数;

// 源码位置: /src/complier/index.js

export const createCompiler = createCompilerCreator(function baseCompile (
  template: string,
  options: CompilerOptions
): CompiledResult {
  // 模板解析阶段:用正则等方式解析 template 模板中的指令、class、style等数据,形成AST
  const ast = parse(template.trim(), options)
  if (options.optimize !== false) {
    // 优化阶段:遍历AST,找出其中的静态节点,并打上标记;
    optimize(ast, options)
  }
  // 代码生成阶段:将AST转换成渲染函数;
  const code = generate(ast, options)
  return {
    ast,
    render: code.render,
    staticRenderFns: code.staticRenderFns
  }
})

 

posted @ 2023-03-21 11:03  阿兰儿  阅读(25)  评论(0编辑  收藏  举报