1. 程式人生 > >Vue 的原理分析 MVVM的理解

Vue 的原理分析 MVVM的理解

 今天參去參加了面試,其中問了許多關於MVVM設計模式的探討,還有關於Vue框架的一些之事,總結一下;

MVC:model 資料層 可以理解為ajax調取過來的一些資料; view 檢視層 理解為html 靜態的呈現。 controller js 控制層 資料層和檢視層的連線層面。
MVVM :MV viewmodel 雙向資料繫結 通過MV的互動 來實現model 與view 的響應處理。
vue 是一個漸進式的框架,採用的是一個自底向上的開發模式,漸進式:主張最少,
主流框架分析
我們看一下現有的一些主流框架從少到多所解決的問題。這個多少並不是來評價框架的好壞,而是從設計的角度出發看它涵蓋多少內容。

純模板引擎:最少的就是純模板引擎,只管狀態到介面的對映。

React和Vue:其實這兩者都是非常專注的只做狀態到介面對映,以及元件。

Backbone:它會給你多一些架構上指導,比如它會讓你分層。

Angular:它做的事情就更多,它有自己的路由,這些都會包含在裡面。

Ember:相比Angular,Ember做得就更加徹底,Ember信奉的是約定優於配置,它會將一切都幫你設計好打包好,你就開箱用就可以了。

Meteor:Meteor只是一個極端,它是從前到後全都包含,從前端到資料層到資料庫,全都幫你打包好。

通過簡單的分析,我們可以感受到,做得少的框架不一定就不如做得多的框架,這體現出一種取捨。也就是說,做得少的框架可以給你更多的靈活性,但你需要做更多的選擇;做得多的框架有更強的侵入性,學習成本更高,靈活性更低。一旦選擇了一個侵入性強的框架,那麼一些小的部分你就沒有機會去切換成其他你更想用的方案。

所以,React和Vue有一個共同特點,它們都有各自的配套工具,核心雖然只解決一個很小的問題,但它們有生態圈及配套的可選工具,當你把他們一個一個加進來的時候,就可以組合成非常強大的棧,就可以涵蓋其他的這些更完整的框架所涵蓋的問題。
給大家一個參考的連線:
https://www.zhihu.com/lives/846356429794336768/audition-messages
Vue的作者給我們的一些啟發。

在關心一下:具體的vue實現
最重要的VM 利用了ES6的一些新特新,採用了宣告式程式設計(Declarative Programming)替代了過去的類jquery的指令式程式設計(Imperative Programming)。利用ES6 的一些新特性
Object.defineProperty 給每個屬性設定setter()和getter(),每一值的變動就會對應引起其他的變動,就實現了VM 這個和angular 的髒迴圈還有所出入。
另一個重要的是虛擬DOM,這一點vue和react採用的方案都差不多, 不過react的執行速度要比vue快很多, 由於原生的dom節點用不到的屬性太多了(document.createElement建立的)要是遍歷這個東西的話太耗費效能, 所以就有了虛擬dom, 虛擬dom是用javascript物件模擬的, 其中只包含用的到的屬性, 所以進行遍歷對比的時候就要快很多, 由於vue在資料變動的時候就要更新頁面, 但是vue不知道具體什麼東西變化了, 所以只能是把變化的屬性關聯的東西都從新渲染一下, 這個渲染並不是吧原來的東西刪了在新建立一個, 而是把新的資料組裝成的虛擬dom和原來渲染過的虛擬dom進行一個對比, 把差異的地方渲染到頁面上, 這個對比的過程就叫diff演算法