本文當時寫在本地,發現換電腦很不是方便,在這裏記錄下。javascript
2018/07/23html
2016年,對於JavaScript來講輝煌的一年。開發框架大量涌入,讓開發者有了更多的選擇。到了2018年就目前火熱程度來講,angular,react,vue 仍佔據着主流地位。前端
對比這3個框架,孰優孰劣真的會讓選擇困難症的人頭痛不已。vue
參考本文,但願會對你有所幫助。java
庫react
被設計來執行一些特定的任務,並且一般並不複雜。所以,若是咱們使用庫來構建咱們的應用程序,那麼咱們須要爲每一個任務選擇一個庫,以及設置任務運行者。庫的主要優勢是咱們能夠徹底控制應用程序。但問題是創建該項目須要更多的時間。git
框架github
被設計用於執行更復雜的事情。所以,若是咱們使用框架,那麼它會自動爲咱們解決不少問題。每一個框架都有一個預約義的設計或結構,包括許多庫和設置跑步者。框架的主要優勢是開發過程要快得多,由於它包含了咱們執行不一樣任務所需的全部可能的庫。可是一個框架比圖書館有更嚴格的設計。web
須要庫/框架?vuex
庫是咱們須要的,不依賴庫的人,太強大,不作討論。雖然無框架也是能夠正常工做的,可是這是有代價的。
對於一個項目,它是由開發週期的,俗稱的小項目,即開發週期短,那麼添加框架反而是多餘;相反開發週期長,那麼一個好的框架將會更加的合適。
固然,若是你是一個有着深厚技術和經驗的人,確實能夠坦誠的不使用框架。但你團隊的其餘成員呢?你手下的那些人呢?或者當你的決定把你本身陷入困境的時候呢?這種狀況下,咱們將會看到一個不用框架的團隊在展開冒險,最後他們會發現本身建立了一個須要本身着手維護的框架。
Angular
將本身描述爲「超級厲害的 JavaScript MVW 框架」
如今所說的angular一般指的是 angular2+,特質 angular1代會說明 angular1(2010年10月發佈)。
由 Google 進行開發和維護 ,2代發佈於2016年9月,如今主要是angular4。
遵照 MIT license
優點:
- angular最大的優點在於它的流行程度,雖然在國內 react 和 vue 更加的火熱。
- 對於用戶來講它有一套用於構建用戶界面的豐富組件
- 鑑於國人多數使用的是angular1.x ,它在api上比較全面,功能比較完善
React
將本身描述爲 「用於構建用戶界面的 JavaScript 庫」
由 Facebook 進行開發和維護,發佈於2013年3月。
開始遵照 BSD3-license(證書說明:Facebook 的專利受權是在保護本身免受專利訴訟的能力的同時分享其代碼。有些人聲稱,若是你的公司不打算起訴 Facebook,那麼使用 React 是能夠的 )
後期更改蹲守 MIT license
優點:
- React + Redux 模式在於它們相對簡單和專一,作一件事情並把它作好 是很是困難的,但這兩個庫都頗有效地完成了它們的目標
- 組件發生變化,它會以該組件爲根,從新渲染整個組件子樹
Vue
2014年尚未人據說過vuejs,可是在2015年已經開始和angular,react相提並論,脫離了小衆型的框架。2016年發展最迅速的js框架之一
將本身描述爲「用於構建直觀,快速和組件化交互式界面的 MVVM 框架」
由 Google 前員工 Evan You 發佈,時間2014年2月,2016年版本2發佈。
遵照 MIT license
優點:
- 一個簡潔並且合理的架構,使得它易於理解和構建(國內的文檔豐富清晰,有一個強大的充滿激情人羣的社區,這爲 vue.js 增長了巨大的價值,使得爲一個空白項目建立一個綜合的解決方案變得十分容易)
- 使用基於依賴追蹤的觀察系統而且異步更新,左右的數據變化都是獨立觸發
Angular 和 React 獲得了諸如 Facebook ,Google,Whatsapp 等大公司的支持和使用。目前,Google 在他們的不少項目中使用Angular,例如 AdWords UI(用Angular和Dart實現)。
Vue 主要用於小型項目的我的。阿里巴巴,百度,Expedia,任天堂,GitLab 使用 — 可在 madewithvuejs.com 找到一些小型項目的列表。
一個組件獲得一個輸入,而且在一些內部的行爲/計算以後,它返回一個渲染的 UI 模板(一個登陸/註銷區或一個待辦事項列表項)做爲輸出。定義的組件應該易於在網頁或其餘組件中重用 。
React 和 Vue 都擅長處理組件:小型的無狀態的函數接收輸入和返回元素做爲輸出。
Angular 依賴於 TypeScript
React 專一於使用 Javascript ES6
Vue 使用 Javascript ES5 或 ES6
與整個 JavaScript 語言相比,TypeScript 的用戶羣仍然很小。一個風險多是你正在向錯誤的方向發展,由於 TypeScript 可能 - 也許不太可能 - 隨着時間的推移也會消失。此外,TypeScript 爲項目增長了不少(學習)開銷 - 你能夠在 Eric Elliott 的 Angular 2 vs. React 比較 中閱讀更多關於這方面的內容。
幾十年來,開發人員試圖分離 UI 模板和內聯的 Javascript 邏輯,可是使用 JSX,這些又被混合了 。
JSX 是一個相似 HTML 語法的可選預處理器,並隨後在 JavaScript 中進行編譯。JSX 有一些怪癖 —— 例如,你須要使用 className 而不是 class,由於後者是 Javascript 的保留字。JSX 對於開發來講是一個很大的優點,由於代碼寫在同一個地方,能夠在代碼完成和編譯時更好地檢查工做成果。當你在 JSX 中輸入錯誤時,React 將不會編譯,並打印輸出錯誤的行號。
JSX 意味着 React 中的全部內容都是 Javascript -- 用於JSX模板和邏輯
Angular 模板使用特殊的 Angular 語法(好比 ngIf 或 ngFor)來加強 HTML。雖然 React 須要 JavaScript 的知識,但 Angular 會迫使你學習 Angular 特有的語法。
Vue 具備「單個文件組件」。這彷佛是對於關注分離的權衡 - 模板,腳本和樣式在一個文件中,但在三個不一樣的有序部分中。
Angular 是一個框架而不是一個庫,由於它提供了關於如何構建應用程序的強有力的約束,而且還提供了更多開箱即用的功能。Angular 是一個 「完整的解決方案」 - 功能齊全,你能夠愉快的開始開發。你不須要研究庫,路由解決方案或相似的東西 - 你只要開始工做就行了。
React 和 Vue 是很靈活的。他們的庫能夠和各類包搭配。 靈活性越大,責任就越大 - React 沒有規則和有限的指導。每一個項目都須要決定架構,並且事情可能更容易出錯。
Vue 彷佛是三個框架中最輕量的。 源代碼很是易讀,不須要任何文檔或外部庫。
React 常常與 Redux 在一塊兒使用。Redux 以三個基本原則來自述:
換句話說:整個應用程序的狀態存儲在單個 store 的狀態樹中。這有助於調試應用程序,一些功能更容易實現。狀態是隻讀的,只能經過 action 來改變,以免競爭條件(這也有助於調試)。編寫 Reducer 來指定如何經過 action 來轉換 state。
Vue 可使用 Redux,但它提供了 Vuex 做爲本身的解決方案。
React 和 Angular 之間的巨大差別是 單向與雙向綁定。
當 UI 元素(例如,用戶輸入)被更新時,Angular 的雙向綁定改變 model 狀態。React 只有一種方法:先更新 model,而後渲染 UI 元素。Angular 的方式實現起來代碼更乾淨,開發人員更容易實現。React 的方式會有更好的數據總覽,由於數據只能在一個方向上流動(這使得調試更容易)。
最後,Vue 支持單向綁定和雙向綁定(默認爲單向綁定)。
Angular 包含依賴注入(dependency injection),即一個對象將依賴項(服務)提供給另外一個對象(客戶端)的模式。這致使更多的靈活性和更乾淨的代碼。
(MVC)將項目分爲三個部分:模型,視圖和控制器。Angular(MVC 模式的框架)有開箱即用的 MVC 特性。React 只有 V —— 你須要本身解決 M 和 C。
你能夠經過僅僅添加 React 或 Vue 的 JavaScript 庫到你的源碼中的方式去使用它們。可是因爲 Angular 使用了 TypeScript,因此不能這樣使用 Angular。
如今咱們正在更多地轉向微服務和微應用。React 和 Vue 經過只選擇真正須要的東西,你能夠更好地控制應用程序的大小。它們提供了更靈活的方式去把一個老應用的一部分從單頁應用(SPA)轉移到微服務。Angular 最適合單頁應用(SPA),由於它可能太臃腫而不能用於微服務。
Angular 框架很是臃腫。gzip 文件大小爲 143k,而 Vue 爲 23K,React 爲 43k。
爲了提升性能,React 和 Vue 都使用了虛擬 DOM(Virtual DOM)。
Vue 有着很好的性能和高深的內存分配技巧。若是比較快慢的話,這些框架都很是接近(好比 Inferno)。請記住,性能基準只能做爲考慮的附註,而不是做爲判斷標準。
Facebook 使用 Jest 來測試其 React 代碼。
Angular 2 中使用 Jasmine 做爲測試框架。
Vue 缺少測試指導, 可是 Evan 團隊推薦使用 Karma。
Angular 擁有用於原生應用的 NativeScript(由 Telerik 支持)和用於混合開發的 Ionic 框架。
藉助 React, 用 react-native 開發原生 app。
Vue 能夠說擁有Weex開發原生 app。
Angular 的學習曲線確實很陡。它有全面的文檔,但你仍然可能被嚇哭,由於提及來容易作起來難。即便你對 Javascript 有深刻的瞭解,也須要了解框架的底層原理。
對於 React,你可能須要針對第三方庫進行大量重大決策。僅僅 React 中就有 16 種不一樣的 flux 軟件包來用於狀態管理可供選擇 。
Vue 學習起來很容易。公司轉向 Vue 是由於它對初級開發者來講彷佛更容易一些。有了 Vue,初級和高級開發人員之間的差距縮小了,他們能夠更輕鬆地協做,減小 bug,減小解決問題的時間。
在調試方面,React 和 Vue 的黑魔法更少是一個加分項。找出 bug 更容易,由於須要看的地方少了,堆棧跟蹤的時候,本身的代碼和那些庫之間有更明顯的區別。使用 React 的人員報告說,他們永遠沒必要閱讀庫的源代碼。可是,在調試 Angular 應用程序時,一般須要調試 Angular 的內部來理解底層模型。從好的一面來看,從 Angular 4 開始,錯誤信息應該更清晰,更具信息性。
若是你想檢查源代碼,那麼你能夠訪問下面的GitHub倉庫:
Angular:https://github.com/angular/an...
React:https://github.com/facebook/r...
Vue:https://github.com/vuejs/vue
若是你在Google工做:Angular
若是你喜歡 TypeScript:Angular(或 React)
若是你喜歡面向對象編程(OOP): Angular
若是你須要指導手冊,架構和幫助:Angular
若是你在Facebook工做:React
若是你喜歡靈活性:React
若是你喜歡大型的技術生態系統:React
若是你喜歡在幾十個軟件包中進行選擇:React
若是你喜歡JS和「一切都是 Javascript 的方法」:React
若是你喜歡真正乾淨的代碼:Vue
若是你想要最平緩的學習曲線:Vue
若是你想要最輕量級的框架:Vue
若是你想在一個文件中分離關注點:Vue
若是你一我的工做,或者有一個小團隊:Vue(或 React)
若是你的應用程序每每變得很是大:Angular(或 React)
若是你想用 react-native 構建一個應用程序:React
若是你想在圈子中有不少的開發者:Angular 或 React
若是你與設計師合做,並須要乾淨的 HTML 文件:Angular or Vue
若是你喜歡 Vue 可是懼怕有限的技術生態系統:React
若是你不能決定,先學習 React,而後 Vue,而後 Angular。
- [[譯] 2017 年比較 Angular、React、Vue 三劍客](https://juejin.im/post/5a0d5d...
- 6 大主流 Web 框架優缺點對比
- React、Angular和Vue三種最流行的前端框架哪個最好?