1. 程式人生 > >前端三大框架(vue,angular,react)大雜燴

前端三大框架(vue,angular,react)大雜燴

摘要:從angular的誕生獨步天下,到現在三大框架平分天下,基本形勢已經趨於穩定。每一個框架從誕生到受歡迎,都有其特定的原因和背景。不同的開發者選擇時,也是依據於其特定情景下的原因和背景

一、為什麼前端會被vue,angular,react瓜分?

不知道大家有沒有發現,這三個框架除了都是前端框架之外,還大有搞基的成分存在。注意他們三個的名字,分別以v,a,r 開頭,我這麼一說,你是不是忽然間就想到了什麼。哈哈,正是如此,將他們組合起來不就是javascript中無處不在的鬼東西麼?var(當然純屬於開玩笑的)

在這裡我還是要推薦下我自己建的web前端開發學習群:617327703,群裡都是學web前端開發的,如果你正在學習前端 ,小編歡迎你加入,今天分享的這個案例已經上傳到群檔案,大家都是軟體開發黨,不定期分享乾貨(只有前端軟體開發相關的),包括我自己整理的一份2018最新的前端進階資料和高階開發教程,歡迎進階中和進想深入前端的小夥伴。

var關鍵字,是js的變數宣告關鍵字,可以說,它是js得以執行的核心關鍵字,因為要想一段程式碼執行,首先得有各種變數和邏輯判斷做支撐,而在es6之前,js能宣告變數的,就它一個。這似乎也是暗示了vue,angularjs,react這三個框架的不可替代性啊,也不知道當時這三個框架的作者起名時的想表達的特殊含義是什麼,但偏偏就剛好對上了。當然,反過來說,也有可能是起var關鍵字的這個人,當時考慮得面面俱到。雖然看上去是巧合,但我總感覺這之中總有一種道不明的關係。雖然vue是後起之秀,但就目前的受歡迎程度來說,好像就是這個順序,至少國內現在肯定是這樣的。

有了這三個框架之後,我們告別了以前jquery麵條式的程式碼,也擺脫了到處操作dom元素帶來的繁瑣,模組業務劃分更清晰。這三個框架的出現,不僅讓前端的工作得以高效,也讓後端省了不少事,比如,路由控制。在以前,幹後端是對決要比前端高一個檔次的,但現在,完全不一樣了。如果有一個牛逼的前端,後端差不多隻需要會增刪改查的基本業務就能完全搞定一個web應用。當然,這裡只是針對程式碼部分,搭建伺服器之類的另當別論。

二、三大框架的優缺點

我們主要從資料流、檢視渲染、效能與優化、模組化元件化等四個方面來作比較

1、資料流

Angular 使用雙向繫結即:介面的操作能實時反映到資料,資料的變更能實時展現到介面。

1.1、它的實現原理:

$scope變數中使用髒值檢查來實現。像ember.js是基於setter,getter的觀測機制,

$scope.$watch函式,監視一個變數的變化。函式有三引數,”要觀察什麼”,”在變化時要發生什麼”,以及你要監視的是一個變數還是一個物件。

使用ng-model時,你可以使用雙向資料繫結。

使用$scope.$watch(檢視到模型)以及$scope.$apply(模型到檢視),還有$scope.$digest

呼叫$scope.$watch時只為它傳遞了一個引數,無論作用域中的什麼東西發生了變化,這個函式都會被呼叫。在ng-model中,這個函式被用來檢查模型和檢視有沒有同步,如果沒有同步,它將會使用新值來更新模型資料。

1.2、雙向繫結的三個重要方法:

$scope.$apply()

$scope.$digest()

$scope.$watch()

在angularjs雙向繫結中,有2個很重要的概念叫做dirty check,digest loop,dirty check(髒檢測)是用來檢查繫結的scope中的物件的狀態的,例如,在js裡建立了一個物件,並且把這個物件繫結在scope下,這樣這個物件就處於digest loop中,loop通過遍歷這些物件來發現他們是否改變,如果改變就會呼叫相應的處理方法來實現雙向繫結

Vue 也支援雙向繫結,預設為單向繫結,資料從父元件單向傳給子元件。在大型應用中使用單向繫結讓資料流易於理解。

1.3、髒檢測的利弊

和ember.js等技術的getter/setter觀測機制相比(優):

getter/setter當每次對DOM產生變更,它都要修改DOM樹的結構,效能影響大,Angular會把批量操作延時到一次更新,效能相對較好。

和Vue相比(劣):

Vue.js 有更好的效能,並且非常非常容易優化,因為它不使用髒檢查。Angular,當 watcher 越來越多時會變得越來越慢,因為作用域內的每一次變化,所有 watcher 都要重新計算。並且,如果一些 watcher 觸發另一個更新,髒檢查迴圈(digest cycle)可能要執行多次。 Angular 使用者常常要使用深奧的技術,以解決髒檢查迴圈的問題。有時沒有簡單的辦法來優化有大量 watcher 的作用域。Vue.js 則根本沒有這個問題,因為它使用基於依賴追蹤的觀察系統並且非同步列隊更新,所有的資料變化都是獨立地觸發,除非它們之間有明確的依賴關係。唯一需要做的優化是在 v-for 上使用 track-by。

React-單向資料流

MVVM流的Angular和Vue,都是通過類似模板的語法,描述介面狀態與資料的繫結關係,然後通過內部轉換,把這個結構建立起來,當介面發生變化的時候,按照配置規則去更新相應的資料,然後,再根據配置好的規則去,從資料更新介面狀態。

React推崇的是函數語言程式設計和單向資料流:給定原始介面(或資料),施加一個變化,就能推匯出另外一個狀態(介面或者資料的更新)。

React和Vue都可以配合Redux來管理狀態資料。

2、檢視渲染

Angular1

AngularJS的工作原理是:HTML模板將會被瀏覽器解析到DOM中, DOM結構成為AngularJS編譯器的輸入。AngularJS將會遍歷DOM模板, 來生成相應的NG指令,所有的指令都負責針對view(即HTML中的ng-model)來設定資料繫結。因此, NG框架是在DOM載入完成之後, 才開始起作用的。

React

React 的渲染建立在 Virtual DOM 上——一種在記憶體中描述 DOM 樹狀態的資料結構。當狀態發生變化時,React 重新渲染 Virtual DOM,比較計算之後給真實 DOM 打補丁。

Virtual DOM:

提供了函式式的方法描述檢視,它不使用資料觀察機制,每次更新都會重新渲染整個應用,因此從定義上保證了檢視與資料的同步。它也開闢了 JavaScript 同構應用的可能性。

在超大量資料的首屏渲染速度上,React 有一定優勢,因為Vue 的渲染機制啟動時候要做的工作比較多,而且React 支援服務端渲染。React 的Virtual DOM 也需要優化。複雜的應用裡可以選擇 1. 手動新增shouldComponentUpdate 來避免不需要的 vdom re-render;2. Components 儘可能都用 pureRenderMixin,然後採用 Flux 結構 + Immutable.js。其實也不是那麼簡單的。相比之下,Vue由於採用依賴追蹤,預設就是優化狀態:動了多少資料,就觸發多少更新,不多也不少。React 和 Angular 2 都有服務端渲染和原生渲染的功能。Vue.js不使用 Virtual DOM 而是使用真實 DOM 作為模板,資料繫結到真實節點。Vue.js 的應用環境必須提供 DOM。Vue.js 有時效能會比 React 好,而且幾乎不用手工優化。

3、效能與優化

效能方面,這幾個主流框架都應該可以輕鬆應付大部分常見場景的效能需求,區別在於可優化性和優化對於開發體驗的影響。Vue 的話需要加好 track-by 。React 需要 shouldComponentUpdate 或者全面 Immutable,Angular 2 需要手動指定 change detection strategy。從整體趨勢上來說,瀏覽器和手機還會越變越快,框架本身的渲染效能在整個前端效能優化體系中,會漸漸淡化,更多的優化點還是在構建方式、快取、圖片載入、網路鏈路、HTTP/2 等方面

4、模組化與元件

Angular1 -> Angular2

Angular1使用依賴注入來解決模組之間的依賴問題,模組幾乎都依賴於注入容器以及其他相關功能。不是非同步載入的,根據依賴列出第一次載入所需的所有依賴。

可以配合類似於Require.js來實現非同步載入,懶載入(按需載入)則是藉助於 ocLazyLoad 方式的解決方案,但是理想情況下應該是本地框架會更易懂。

Angular2使用ES6的module來定義模組,也考慮了動態載入的需求。

Vue

Vue中指令和元件分得更清晰。指令只封裝 DOM 操作,而元件代表一個自給自足的獨立單元 —— 有自己的檢視和資料邏輯。在 Angular1 中兩者有不少相混的地方

React

一個 React 應用就是構建在 React 元件之上的。

元件有兩個核心概念:props,state。 一個元件就是通過這兩個屬性的值在 render 方法裡面生成這個元件對應的 HTML 結構。

傳統的 MVC 是將模板放在其他地方,比如 script 標籤或者模板檔案,再在 JS 中通過某種手段引用模板。按這種思路,想想多少次我們面對四處分散的模板片段不知所措?糾結模板引擎,糾結模板存放位置,糾結如何引用模板。

React 認為元件才是王道,而元件是和模板緊密關聯的,元件模板和元件邏輯分離讓問題複雜化了。所以就有了 JSX 這種語法,就是為了把 HTML 模板直接嵌入到 JS 程式碼裡面,這樣就做到了模板和元件關聯,但是 JS 不支援這種包含 HTML 的語法,所以需要通過工具將 JSX 編譯輸出成 JS 程式碼才能使用(可以進行跨平臺開發的依據,通過不同的直譯器解釋成不同平臺上執行的程式碼,由此可以有RN和React開發桌面客戶端)。

三、我們如何選?

年輕的程式設計師都是好奇的貓,玩過一個又一個的前端框架。從毛球上弄出一條條的線,玩啊玩,最後這一個個的框架在腦子裡攪漿糊。有太多的選擇,就是一件麻煩的事;沒有選擇時,就是一件更麻煩的事;有唯一的選擇時,事情就會變得超級簡單。

當一個程式設計師學了某個最新的框架之後,通常來說這個框架有著更多的優點,這個時候最容易出現的想法就是替換現有的框架,科室現有的框架並沒有什麼大的問題,並且評估不充分的時候,新的框架則會有更多的風險。

所以最後總結一下:技術選型沒有銀彈,沒有一個框架能夠解決所有的問題。這時,為了更好的考量不同的因素,你需要列出重要的象限,如開發效率,團隊喜好,開發週期等時機情況選擇哪個框架最合適你當前的團隊和專案。

相關推薦

前端三大框架(vue,angular,react)大雜燴

摘要:從angular的誕生獨步天下,到現在三大框架平分天下,基本形勢已經趨於穩定。每一個框架從誕生到受歡迎,都有其特定的原因和背景。不同的開發者選擇時,也是依據於其特定情景下的原因和背景一、為什麼前端會被vue,angular,react瓜分?不知道大家有沒有發現,這三個框

前端三大框架Vue框架詳解

Vue框架誕生於2014年,其作者為中國人——尤雨溪,也是新人最容易入手的框架之一,不同於React和Angular,其中文文件也便於大家閱讀和學習。Vue用於構建互動式的Web介面的庫,是一個構建資料驅動的Web介面漸進式框架,該框架遵循CMD規範,並且提供的設計模式為MV

前端三大框架Angular & React & Vue

前端三大框架: Angular【Google】:一套框架,多種平臺移動端 & 桌面端。學會用Angular構建應用,然後把這些程式碼和能力複用在多種多種不同平臺的應用上 —— Web、移動 Web、移動應用、原生應用和桌面原生應用。 React【Facebook Open Source】

前端框架Angular ReactVue的比較

前端這幾年的技術發展很快,細分下來,主要可以分成四個方面: 1.開發語言技術,主要是ES6&7,coffeescript,typescript等;  2.開發框架,如Angular,React,Vue.js,Angular2等;  3.開發工具的豐富和前端工程化

Vue 淺談前端js框架vue

切換 tco 產生 ons 創建組 為什麽 是否 並且 屬性 Vue Vue近幾年來特別的受關註,三年前的時候angularJS霸占前端JS框架市場很長時間,接著react框架橫空出世,因為它有一個特性是虛擬DOM,從性能上碾軋angularJS,這個時候,vue1.0悄悄

前端漸進式框架-Vue-初始化

引入Vue.js cdn:<script src="https://cdn.jsdelivr.net/npm/vue"></script> 本地引用 初始化: new Vue({    &nbs

對比起來學習前端三大框架(持續更新)

angular: 資料雙向繫結,模板功能強大。依賴注入和自定義directive非常靈活。 學習路線長,框架偏重。 優缺點詳見:angularJS在實際開發中有哪些優缺點? vue: 輕量級。每一個元件自帶shouldComponentUpdate   re

前端JS框架——Vue.js筆記(一)

基本的Vue程式碼結構: 插值表示式: v-text: 使用v-cloak解決v-text閃爍問題: 使用v-html對html格式文字進行渲染 使用v-bind進行資料繫結: 它的縮寫是: 使用v-on進行事件監聽繫結: 它的縮寫是@符號 事件修飾符:

前端三大框架通用dockerfile

需要先將專案build FROM node:8-alpine COPY ./dist /opt/app WORKDIR /opt/app ENV PORT 4200 RUN npm config set registry https://registry.np

前端 mvc 框架 Vue.js 堆疊記憶體深度 copy

Vue.js 是當下前端最主流的框架之一,強大的 mvc 模式,讓我們可以放棄傳統式通過 JS 去操作 DOM ,我們只需要關注資料層就可以了,只要資料更新,我們的 view 層就會自動更新渲染。 可是這樣的模式,在一些特殊場景下卻並不是特別好用,當元件間傳遞物件時,由於此物件的引用型別

Vue Angular React 全面對比,我們該選誰?

推薦使用:Vue.js > ReactJS > Angular 2 > AngularJS 概要: 現在, Vue 還沒有 React (由 Facebook 維護) 或者 Angular 2 (受到 Google 的支援) 流行。不過,許

vue開發:vue,angular,react資料雙向繫結原理分析

傳統做法 前端維護狀態,手動操作DOM更新檢視。前端框架對伺服器資料通過模版進行渲染。當用戶產生了一個動作之後,我們通過document.getElementBy... 手動進行DOM更新。  框架幫忙分離資料和檢視,後續狀態更新需要手動操作DOM,因為框架只管首次渲染,不追蹤狀態監聽變化。 雙向資料繫結

淺談vue,angular,react資料雙向繫結原理分析

傳統做法 前端維護狀態,手動操作DOM更新檢視。前端框架對伺服器資料通過模版進行渲染。當用戶產生了一個動作之後,我們通過document.getElementBy... 手動進行DOM更新。  框架幫忙分離資料和檢視,後續狀態更新需要手動操作DOM,因為框架只管首次渲染,不

前端三大框架:資料繫結與資料流

### 目錄 - 序言 - 單向資料繫結 vs 雙向資料繫結 - 單向資料流 vs 雙向資料流 - 資料流與資料繫結 - 參考 ### 1. 序言 在前端三大主流的框架中,我們可能會經常聽到 React 是單向資料流,採用單向資料繫結,而 Vue 2.x 也是單向資料流,但同時支援單向資料繫結和雙向

主流前端框架對比:Vue.js , React, Angular.js

.cn angular nbsp 入門 react 如果 blog reac 示例 個人認為Vue.js的文檔最懇切。我認為結合文檔和遇到問題Google答案的匹配度來講:Vue.js > ReactJS > AngularJS > Angular 2

vuereactangular三大框架對比

首先,我們先了解什麼是MVX框架模式? MVX框架模式:MVC+MVP+MVVM 1.MVC:Model(模型)+View(檢視)+controller(控制器),主要是基於分層的目的,讓彼此的職責分開。 View通過Controller來和Model聯絡,C

前端框架angular, reactVue區別與特點

框架用來解決什麼的? Angular,React,Vue,這三者其實面對的是同一個領域,那就是Web應用。 這三者中,Angular的適用領域相對窄一些,React可以拓展到服務端,移動端Native部分,而Vue因為比較輕量,還能用於業務場景非常輕的頁面中。 在Web

前端框架天下三分:Angular ReactVue的比較

前端這幾年的技術發展很快,細分下來,主要可以分成四個方面: 1.開發語言技術,主要是ES6&7,coffeescript,typescript等;  2.開發框架,如Angular,React,Vue.js,Angular2等;  3.開發工具的豐富和前端工程化

手把手教你使用Vue/React/Angular三大框架開發Pagination分頁元件

    DevUI是一支兼具設計視角和工程視角的團隊,服務於華為雲DevCloud平臺和華為內部數箇中後臺系統,服務於設計師和前端工程師。官方網站:devui.designNg元件庫:ng-devui(歡迎Star) 引言 “他在正午、黃昏,在一天裡的許多時刻去感受它、記錄它,

心得分享:前端框架搭建參考( vuereact )

從工作之初的requirejs,又經歷了nwjs、nodejs,到現在的vue、react-redux、react-native,也走過了一段不長不短的前端開發之路。本篇將分享一下我的前端框架的一點理解。現在最流行的前端框架要數 vue 和 react。按經驗,偏中、小型、要