1. 程式人生 > >Angular2與React,前端的未來志向何方?

Angular2與React,前端的未來志向何方?

去年年底,我回答過一個問題:

2014 年末有哪些比較火的 Web 開發技術? - 徐飛的回答

轉眼間一年過去了,Angular 2釋出了beta版,React如日中天,只有Polymer還是不溫不火。

這一年時間內,我也經常觀察前端界的各種趨勢,關注各種創新點,並且跟業內同行進行過一些探討,最終結論是:這三個框架,代表著前端框架目前的三條路線,仍然是並行發展的,只是在發展過程中互相吸收先進的思想。

哪三條路線呢:

  1. 以Angular,Vue,Aurelia,Avalon為代表的MVVM路線
  2. React以及相關周邊
  3. 以Polymer,NovaJS等為代表的Web Components路線

這三條路線本質上都是前端元件化框架/庫,所以,元件化理念是它們的立身之本,雖然大家的實現方式有所不同,但很多理念都是共通的。具體差別在哪裡呢?

在這裡需要先提及三個名詞:

MVVM,Virtual DOM,Web Components

我提這三個詞的意思,並不是說它們就對應於剛才三條路線,人們往往會有誤解:比如認為MVVM是Angular等框架的專利;除了React,別的框架也就不能有Virtual DOM了。

其實不然。

MVVM框架們之所以被冠以MVVM的名號,因為他們都是非常側重於分層的,三層分得一般非常清楚。比如說我們看Vue,它的一個元件中,包含很明顯的三層。

但是在React的實踐中,如果應用的規模增大,資料的組合複雜度高,很可能到最後也搞成了類似VM和M的分層,在這個回答的評論下:
如何正確、客觀地評價 React? - 鄧欣欣的回答


@墨磊 提到的:

另,最近一些專案中,在 Flux 或者 類 Flux 的 Store => View 這一步,
因為一些歷史原因,依然不得不走向了這樣的過程 ModelStore => ViewModelStore => View,同樣可以視為 MVVM 吧。

所以,MVVM並非MVVM框架們特有,當基於React或者其他框架的專案變大的時候,仍然有可能作為一種實踐被用起來。

再來看Virtual DOM,目前React是有這個東西的,但MVVM框架的底層一樣可以搞起來。好幾個框架的底層都部分使用了這種理念,比如大家的track by,都可以把資料和DOM之間的關係索引起來,當一個數組的元素交換了,它們可以藉助這些索引關係,不銷燬原有DOM樹,而是直接把資料交換了設定過去。

如果MVVM框架不是使用先生成DOM,再提取模板配置這種方式,而是直接解析模板生成AST,做這層更加容易,而且可以比較容易替換成其他渲染方式,比如在服務端,或者在移動端的Native程式碼中渲染。

再看Web Components,主流的MVVM框架其實都在往這個方向靠攏,而React由於使用工程手段解決了Shadow DOM和Scoped CSS這樣的問題,所以對此並不太在意,而且由於它實現的特殊性,要相容Web Components反而比較難。

D2的時候我曾經跟
@賀師俊
在這些方面有過交流,他認為MVVM框架們很可能最終跟Polymer合流,整個前端框架領域被React和MVVM流派平分,鹿死誰手尚未可知。

我覺得,目前的應用場景是足夠大的,每個流派都是可以活得下去的,無所謂東風壓倒西風還是反過來,雙方都能生存下去。到最後,當形成整體解決方案的時候,很可能兩派方案都是殊途同歸:

  • 檢視層實現了Virtual DOM
  • 巨集觀上元件化,形成元件樹
  • 微觀上MVVM,並且都應用類似Flux,Redux之類的資料層方案
  • 程式設計模型吸收Immutable和Rx的
  • 通訊層應用Relay或者Meteor之類的方案

比較大的區別可能是對Web Components標準的應用程度,MVVM系可能都會使用它,並且相應地採用不同的CSS資源管理和構建方案。

去年年底的時候,有一件事情我沒有想到,那就是ES6的普及速度,有鑑於此,我認為,未來一兩年內,ES新版本會成為各路元件化開發方案的預設配置,並且得到廣大開發人員的接受,TypeScript也可能會隨之大放異彩。

另外有一點我沒有考慮到的就是HTTP2,這個經過
@賀師俊
指出之後,我覺得很有道理。我總結一下他的觀點:之前我們都會考慮程式碼的合併打包等方案,但是當HTTP2普及之後,這方面很可能不是問題,人們會迴歸一種只專注於程式碼本身,而不是著重考慮現有這些型別的優化方式,所以這可能會對各類工程管控優化方案有個顛覆。

目前能看到的大致這些,一年後來看看。

順便回答你的問題,1-2年內,Angular 2應該不太會顛覆得動React,甚至要超越自身的1.x版本都比較困難,更詳細的見這裡:如何評價 Angular 2 釋出 Beta 版本? - 徐飛的回答

倒是Vue,在2016年的增長會很令人期待。

相關推薦

Angular2React前端未來志向何方

去年年底,我回答過一個問題:2014 年末有哪些比較火的 Web 開發技術? - 徐飛的回答 轉眼間一年過去了,Angular 2釋出了beta版,React如日中天,只有Polymer還是不溫不火。 這一年時間內,我也經常觀察前端界的各種趨勢,關注各種創新點,並且跟業內同行進行過一些探討,最終結論是:這三個

前端框架angular, react Vue區別特點

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

前端迷思React.js

.html injection 參數 性能提升 bundles 人力 鄙視 編碼 bar 前端迷思與React.js 前端技術這幾年蓬勃發展, 這是當時某幾個項目需要做前端技術選型時, 相關資料整理, 部分評論引用自社區。 開始吧: 目前, Web 開發技術框

Angular團隊公布路線圖並演示怎樣React Native集成

content ogl date pda andro 演講稿 服務 團隊 stat 本文來源於我在InfoQ中文站翻譯的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/angular-2-react-native-roadmap

前端---偽類偽元素的用法

eat png color 用法 方便 style one 渲染 邏輯 一:基本用法  ::before和::after這兩個偽類下有特有的屬性content,用於在CSS渲染中向元素邏輯上的頭部或尾部添加內容。這些內容不會改變文檔的內容,不會出現在DOM中,不可復制,僅僅

讓這三個月來的更猛烈些吧前端react同構項目

aso ssr seo ava git blog 發展 客戶端請求 功能 昨天一篇文章講述了我在這三個月中由.net到java的過程,其中踩坑填坑的細節真不是三言兩語可以道盡,而完成時的喜悅也遠非尋常可比(僅次於漲工資)。然而到這並不算完結,作為前後端分離的忠實粉絲,我認

分頁外掛pagehelper初使用前端傳遞當前頁碼每頁條數後臺接受實現分頁

最新的專案用到了pagehelper分頁外掛,在此做下筆記方便以後檢視!同時也希望能對別人產生幫助。 1.因為專案是maven進行管理的,所以:第一步就是在pom.xml檔案中引入pagehelper分頁外掛。 <dependency> <groupId>com

前端框架Angularreact對比

本文主要討論兩種框架在應用上的特點對比。 Angular Angular 是基於 TypeScript 的 Javascript 框架。提到Angular,就不得不提它的前身AngularJS。AngularJS是Google釋出的第一個MVVM框架,帶來了許多新特性,為

“智資料未來”——2018中國儲存資料峰會在京盛大舉行

轉自:數字經濟智庫 資料儲存產業正在從儲存進入資料價值創新發展的新階段,這是12月11日, 在北京國際飯店舉行的2018中國儲存與資料峰會(DATA & STORAGE SUMMIT 2018)所傳遞出來的資訊,該會議由百易傳媒(DOIT)主辦,已經連續14年成功舉行。  

認識react 並簡單vue對比

應用場景: 負責場景下的高效能 重用元件庫,元件組合 中文官網:https://reactjs.org.cn/doc/in... 特點: 宣告式編碼(不需要關心如何實現,只需要關注在哪裡做什麼) 元件化編碼 高效的DOM Diff,最小

Vue.js秒殺React成最受歡迎的開源前端框架!

近日,Jaxenter做了一項關於前端人員的問卷調查,根據最新的問卷調查結果顯示:Vue.js秒殺React,成為最受歡迎的前端框架 為什麼要做這次問卷? 為什麼要去比較Vue.js和React呢?這得從它們的發展歷程說起,2016年,React在Web端和移動端都實現了迅速的成長,當時它最

讓這三個月來的更猛烈些吧前端react同構專案

前端的框架、工具什麼的實在太多了,近乎亂象,然而這並不影響什麼,選擇並沒有想象中的那麼艱難,因為真正需要選擇的東西只有一個:框架。對於目前比較火熱的三大前端框架angular、react和vue。angular因為個人喜好問題被首先排除,所以我僅僅需要react和vue中二選一即可,最終我們選擇了react

vuereact對比相同之處不同之處。

兩者都為當下主流框架 相同之處在於: 一、使用 Virtual DOM 二、提供了響應式 (Reactive) 和元件化 (Composable) 的檢視元件。 三、將注意力集中保持在核心庫,而將其他功能如路由和全域性狀態管理交給相關的庫。 不同之處: 一、在 Rea

前後端分離:前端人員做頁面渲染後端做介面

用到的技術: 1.nginx 關鍵,反向代理請求 2.Ajax 請求介面載入內容 3.Json 4.AngularJS 模組化開發,非必要 流程 Nginx 關鍵配置 location /lorenzo/api {

當代前端應該怎麼寫這個hello world? 從DOM操作看Vue&React前端元件化順帶補齊React的demo 【前端優化之拆分CSS】前端三劍客的分分合合

前言 大概16年的時候我們隊react進行了簡單的學習:從DOM操作看Vue&React的前端元件化,順帶補齊React的demo,當時我們只是站在框架角度在學習,隨著近幾年前端的變化,想寫個hello world似乎變得複雜起來,我們今天便一起來看看現代化的前端,應該如何做一個頁面,今天我們學習r

vue2.x響應式原理vuereact響應式簡單對比

配合ppt食用更佳ppt 實現的最終目標 const demo = new Vue({ data: { text: "before", }, // 對應的template 為 <div><span>{{text

前端路由實現 react-router 原始碼分析

在單頁應用上,前端路由並不陌生。很多前端框架也會有獨立開發或推薦配套使用的路由系統。那麼,當我們在談前端路由的時候,還可以談些什麼?本文將簡要分析並實現一個的前端路由,並對 react-router 進行分析。 一個極簡前端路由實現 說一下前端路由實現的簡要原理,以 hash

React用元件化思想寫前端程式碼

前陣子嘗試用React開發了一個專案的前端,寫起來還算是流暢。將頁面中各模組進行分割並形成元件之後,管理起來更加的方便,程式碼的可讀性也相對於傳統的麵條式程式設計有很大的提高。React相對於Angular來說,我個人認為是更加輕量化的,它更注重於MVC中的V。

React 走紅前端最強技能圖快速 Get!

2018 年 6 月 Hacker News 招聘趨勢已經發布,資料顯示,JavaScript