Mini-Vue渲染器和响应式系统实现

107 阅读1分钟

Diff算法

回流

虚拟DOM

  • 渲染过程 image.png

三大核心系统

  • 事实上Vue的源码包含三大核心:
    • Compiler模块:编译模板系统;
    • Runtime模块:也可以称之为Renderer模块,真正渲染的模块;
    • Reactivity模块:响应式系统;

image.png

runtime -> renderer(渲染器)

image.png

Mini-Vue

image.png

渲染系统实现

  • 渲染系统,该模块主要包含三个功能:
    • 功能一:h函数,用于返回一个VNode对象;
    • 功能二:mount函数,用于将VNode挂载到DOM上;
    • 功能三:patch函数,用于对两个VNode进行对比,决定如何处理新的VNode;

renderer 渲染器的实现

响应式系统

响应式系统

MiniVue

MiniVue

Vue3选择Proxy的原因

  • Object.defineProperty是劫持对象的属性时,如果新增元素

    • Vue2需要再次调用defineProperty
    • Proxy劫持的是整个对象,不需要做特殊处理
  • 修改对象的不同

    • 使用defineProperty时,修改原来的obj对象就可以触发拦截
    • 使用proxy,就必须修改代理对象,即Proxy的实例才可以触发拦截
  • Proxy能观察的类型比defineProperty更丰富

    • has:in操作符的捕捉器
    • deleteProperty:delete操作符的捕捉器
    • 等其他操作
  • Proxy作为新标准将受到浏览器厂商重点持续的性能优化

  • 缺点:Proxy不兼容IE,也有polyfill,defineProperty能支持到IE9


学习笔记,版权归codeWhy所有