1. 程式人生 > >vue、react、angular三大框架對比

vue、react、angular三大框架對比

首先,我們先了解什麼是MVX框架模式?

MVX框架模式:MVC+MVP+MVVM

1.MVC:Model(模型)+View(檢視)+controller(控制器),主要是基於分層的目的,讓彼此的職責分開。

View通過Controller來和Model聯絡,Controller是View和Model的協調者,View和Model不直接聯絡,基本聯絡都是單向的。

使用者User通過控制器Controller來操作模板Model從而達到檢視View的變化。

2.MVP:是從MVC模式演變而來的,都是通過Controller/Presenter負責邏輯的處理+Model提供資料+View負責顯示。

在MVP中,Presenter完全把View和Model進行了分離,主要的程式邏輯在Presenter裡實現。

並且,Presenter和View是沒有直接關聯的,是通過定義好的介面進行互動,從而使得在變更View的時候可以保持Presenter不變。

MVP模式的框架:Riot,js。

3.MVVM:MVVM是把MVC裡的Controller和MVP裡的Presenter改成了ViewModel。Model+View+ViewModel。

View的變化會自動更新到ViewModel,ViewModel的變化也會自動同步到View上顯示。

這種自動同步是因為ViewModel中的屬性實現了Observer,當屬性變更時都能觸發對應的操作。

MVVM模式的框架有:AngularJS+Vue.js和Knockout+Ember.js後兩種知名度較低以及是早起的框架模式。

Vue.js是什麼?

看到了上面的框架模式介紹,我們可以知道它是屬於MVVM模式的框架。那它有哪些特性呢?

其實Vue.js不是一個框架,因為它只聚焦檢視層,是一個構建資料驅動的Web介面的庫。

Vue.js通過簡單的API(應用程式程式設計介面)提供高效的資料繫結和靈活的元件系統。

Vue.js的特性如下:

1.輕量級的框架

2.雙向資料繫結

3.指令

4.外掛化

Vue.js與其他框架的區別?

1.與AngularJS的區別

相同點:

都支援指令:內建指令和自定義指令。

都支援過濾器:內建過濾器和自定義過濾器。

都支援雙向資料繫結。

都不支援低端瀏覽器。

不同點:

1.AngularJS的學習成本高,比如增加了Dependency Injection特性,而Vue.js本身提供的API都比較簡單、直觀。

2.在效能上,AngularJS依賴對資料做髒檢查,所以Watcher越多越慢。

Vue.js使用基於依賴追蹤的觀察並且使用非同步佇列更新。所有的資料都是獨立觸發的。

對於龐大的應用來說,這個優化差異還是比較明顯的。

2.與React的區別

相同點:

React採用特殊的JSX語法,Vue.js在元件開發中也推崇編寫.vue特殊檔案格式,對檔案內容都有一些約定,兩者都需要編譯後使用。

中心思想相同:一切都是元件,元件例項之間可以巢狀。

都提供合理的鉤子函式,可以讓開發者定製化地去處理需求。

都不內建列數AJAX,Route等功能到核心包,而是以外掛的方式載入。

在元件開發中都支援mixins的特性。

不同點:

React依賴Virtual DOM,而Vue.js使用的是DOM模板。React採用的Virtual DOM會對渲染出來的結果做髒檢查。

Vue.js在模板中提供了指令,過濾器等,可以非常方便,快捷地操作DOM。

如何使用Vue.js?

1.安裝

(1)script

如果專案直接通過script載入CDN檔案,程式碼示例如下:

<script src="http://webapp.didistatic.com/static/webapp/shield/z/vue/vue/1.0.24/vue.min.js"></script>

(2)npm

如果專案給予npm管理依賴,則可以使用npm來安裝Vue,執行如下命令:

$npm i vue --save-dev

(3)bower

如果專案基於bower管理依賴,則可以使用bower來安裝Vue,執行如下命令:

$bower i vue --save-dev

學習web前端開發中,會有很多的框架,那麼目前流行的框架有哪些呢?

一、Vue.js: 其實Vue.js不是一個框架,因為它只聚焦檢視層,是一個構建資料驅動的Web介面的庫。

Vue.js通過簡單的API(應用程式程式設計介面)提供高效的資料繫結和靈活的元件系統。

Vue.js的特性如下:

1.輕量級的框架

2.雙向資料繫結

3.指令

4.外掛化

優點: 1. 簡單:官方文件很清晰,比 Angular 簡單易學。

2. 快速:非同步批處理方式更新 DOM。

3. 組合:用解耦的、可複用的元件組合你的應用程式。

4. 緊湊:~18kb min+gzip,且無依賴。

5. 強大:表示式 & 無需宣告依賴的可推導屬性 (computed properties)。

6. 對模組友好:可以通過 NPM、Bower 或 Duo 安裝,不強迫你所有的程式碼都遵循 Angular 的各種規定,使用場景更加靈活。

缺點: 1. 新生兒:Vue.js是一個新的專案,沒有angular那麼成熟。

2. 影響度不是很大:google了一下,有關於Vue.js多樣性或者說豐富性少於其他一些有名的庫。

3. 不支援IE8:

二、angularJS:

angularJS是一款優秀的前端JS框架,已經被用於Google的多款產品當中。

angularJS的特性如下:

1.良好的應用程式結構

2.雙向資料繫結

3.指令

4.HTML模板

5.可嵌入、注入和測試

優點:   1. 模板功能強大豐富,自帶了極其豐富的angular指令。

2. 是一個比較完善的前端框架,包含服務,模板,資料雙向繫結,模組化,路由,過濾器,依賴注入等所有功能;

3. 自定義指令,自定義指令後可以在專案中多次使用。

4. ng模組化比較大膽的引入了Java的一些東西(依賴注入),能夠很容易的寫出可複用的程式碼,對於敏捷開發的團隊來說非常有幫助。

5. angularjs是網際網路巨人谷歌開發,這也意味著他有一個堅實的基礎和社群支援。

缺點:    1. angular 入門很容易 但深入後概念很多, 學習中較難理解.

2. 文件例子非常少, 官方的文件基本只寫了api, 一個例子都沒有, 很多時候具體怎麼用都是google來的, 或直接問misko,angular的作者.

3. 對IE6/7 相容不算特別好, 就是可以用jQuery自己手寫程式碼解決一些.

4. 指令的應用的最佳實踐教程少, angular其實很靈活, 如果不看一些作者的使用原則,很容易寫出 四不像的程式碼, 例如js中還是像jQuery的思想有很多dom操作.

5. DI 依賴注入 如果程式碼壓縮需要顯示宣告.

三、React:

React主要用於構建UI。你可以在React裡傳遞多種型別的引數,如宣告程式碼,幫助你渲染出UI、也可以是靜態的HTML DOM元素、也可以傳遞動態變數、甚至是可互動的應用元件。

React特性如下:  1.宣告式設計:React採用聲明範式,可以輕鬆描述應用。

2.高效:React通過對DOM的模擬,最大限度地減少與DOM的互動。

3.靈活:React可以與已知的庫或框架很好地配合。

優點:    1. 速度快:在UI渲染過程中,React通過在虛擬DOM中的微操作來實現對實際DOM的區域性更新。

2. 跨瀏覽器相容:虛擬DOM幫助我們解決了跨瀏覽器問題,它為我們提供了標準化的API,甚至在IE8中都是沒問題的。

3. 模組化:為你程式編寫獨立的模組化UI元件,這樣當某個或某些元件出現問題是,可以方便地進行隔離。

4. 單向資料流:Flux是一個用於在JavaScript應用中建立單向資料層的架構,它隨著React檢視庫的開發而被Facebook概念化。

5. 同構、純粹的javascript:因為搜尋引擎的爬蟲程式依賴的是服務端響應而不是JavaScript的執行,預渲染你的應用有助於搜尋引擎優化。

6. 相容性好:比如使用RequireJS來載入和打包,而Browserify和Webpack適用於構建大型應用。它們使得那些艱難的任務不再讓人望而生畏。

缺點: 1. React本身只是一個V而已,並不是一個完整的框架,所以如果是大型專案想要一套完整的框架的話,基本都需要加上ReactRouter和Flux才能寫大型應用。