本文經過一張流程圖來簡要的分析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, 之後的版本不敢保證)雙向綁定