vue实现原理

    0

大概流程

使用正则解析模版,生成AST(抽象语法树),优化之后生成render函数,然后生成虚拟dom,然后通过h函数生成真实dom节点,通过patch函数渲染到页面
响应式依赖Object.defineProperty和发布订阅模式实现,在模版解析的时候,把模板中变量换成数据,绑定更新函数,添加订阅者,通过get方法依赖收集,在属性变化之后,通过setter方法通知订阅了该属性的每一个观察者更新视图,生成新的虚拟dom,再调用patch函数用diff算法比较虚拟dom区别并更新差异到视图

mvvm实现依靠Object.defineProperty和发布订阅模式实现

watch和computed

Vue

Compiler

Dep

Observer

劫持数据

Watcher

更新视图

  1. Get() 计算 执行函数
  2. update() 触发run()
  3. run() node同步,浏览器异步,最终调用get()
  4. cleanDep()清除队列

依赖收集和派发更新

mvvm/响应式原理

  1. 数据劫持+发布订阅
  2. Object.definePropertty()来劫持各个属性的getter setter,在数据变动时候通知观察者,观察者作出对应的回调去更新视图
  3. 数据变动的时候发布消息给订阅者,触发监听回调
  4. Observer,Compile,Watcher
  5. Observer监听model
  6. Compile解析编译模版
  7. Watcher在Observer和Compile通信,达到数据变化更新视图
#讨论区
00条评论
实时对话
loading...