本文经过一张流程图来简要的分析vue的【初始化,模板编译,数据响应式,数据驱动视图】的流程。vue
目的是理清思路。想看详情的请看文末参考连接,或者查找其余文档,由于每一块的内容都是不少的。算法
本文能够搭配我写的 从new Vue()看源码流程 食用。这篇文章主要是从源码来梳理流程。segmentfault
init, mount
compile
,将template
编译为渲染函数render function
render function
生成Virtual DOM
, render function => VNode tree
render function => getter, setter => Watcher.update => patch
。以及使用队列进行异步更新的策略。diff
算法后进行patch
更新视图有这个问题是由于受这篇神文的影响剖析Vue原理&实现双向绑定MVVM。它这里面是精确收集的watcher,数据更新时直接更新指定的dom内容,很是高效。可是vue源码中并无相似的实现。dom
答案是【触发render watcher, 而后走patch流程】。异步
并且在源码中打断点,也能够发现,当改变一个data时是会触发render watcher
的。函数
vue中有三种watcherspa
不信的,请vue源码中搜索 new Watcher
便可发现只有三处。(目前vue@2.6.10, 之后的版本不敢保证)双向绑定