MVC即爲Model + View + Controller的一種軟件架構。View爲前端視圖,和用戶直接打交道的;Model是數據模型,能夠理解爲數據庫持久化存儲;Controller即爲鏈接Model和View之間的業務邏輯控制器。javascript
當前端業務邏輯不斷擴大···前端數據、業務更加複雜的時候,DOM操做確定會增長若是按照之前的方式直接操做DOM性能會差。因而前端大佬們將數據Model與頁面View分離,當數據更新的時候DOM自動更新,若是頁面有更新Model也要同步更新,MVVM模式應運而生。在學習軟件工程的時候,咱們知道要下降耦合,將Model、View分離也是在解耦操做。前端
MVVM = Model + View + ViewModelvue
MVVM作的是將View與Model之間聯繫完全剝離,任何數據同步都交由ViewModel處理。對視圖的修改以及數據的更新都經過ViewModel實現同步。java
前面說到採用MVVM能夠實現雙向綁定,減小數據更新頻繁時,DOM隨之頻繁操做的問題。但是當數據更新時,視圖的渲染依然須要更新DOM樹。DOM很是很是大,若是直接對DOM進行處理性能可能會受影響,因而聰明的FEer想到採用js對象模擬DOM樹,也就是虛擬DOM。數據庫
固然若是每次視圖更新都要渲染整棵DOM樹工做量依然很大。因而乎,每次渲染以前對新舊兩棵樹進行對比diff()
。差別更新到相應的位置。小程序
組件,咱們能夠爲是一個自定義、可複用的代碼段,都有其特定功能。Vue組件也是Vue實例,如header
、footer
。並且,組件間是能夠通訊的。微信小程序
單文件組件就是一個vue
文件就是一個組件,一個文件能夠導出一個組件。瀏覽器
data爲函數,不一樣地方使用這個組件時,可讓這個數據私有。緩存
// 若是data不是函數
let component1 = new MyComponent()
let component2 = new MyComponent()
component1.data.title = '123'
// 此時component2的data的title屬性也會跟着變化
// 因此兩個實例的data必須有本身的域
複製代碼
props
傳遞數據,v-on
,emit
監聽/觸發自定義事件響應new Vue()
做爲EventBus,一個負責$emit
觸發事件,另外一個$on
監聽事件響應。Vuex
Computed實現原理:不管是屬性仍是計算屬性都會對應生成一個watcher實例。因此,當其依賴更新時,計算屬性會隨之更新。微信