如今,Angular和React這兩個JavaScript框架可謂紅的發紫,同時針對這兩個框架的選擇變成了當下最容易被問到及或是被架構設計者考慮的問題,本文或許無法告訴你哪個框架比較優秀,但盡量從更多的角度去比較兩者,盡可能的為你在選擇時提供更多的參考意見。 選擇的方法在選擇之前,我們試著帶著一些問題去審視你將要選擇的框架(或是任何工具),試著用這些問題的答案來幫助我們更了解框架,也更讓選擇變得更容易 框架本身的問題:
需要自我反思的問題:
嚴格說來,Angular和React的比較是不公平的,因為Angular是一個功能豐富的框架,而React是一個UI的元件庫,所以我們在接下來的分析中會將一些經常和React在一起使用的類別庫放在一起討論。 OK,開始… …
成熟度作為一名成熟的開發人員或是能夠決定架構及技術走向的人員,一項必備的技能就是能夠在工作和專案中平衡成熟技術與最前沿框架之間的關係,既能保持人員及技術的前進,又能保證專案或產品的交付質量,所以,必須小心以下可能的風險:
幸好,無論是Angular還是React,似乎都不需要擔心以上的風險 ReactReact由Facebook開發和維護,用於自己的產品,包括Instagram和WhatsApp。現在已經有大約三年半的時間。 它也是GitHub 最受歡迎的項目之一。 AngularAngular由Google進行維護,並用於Google 的Adwords 和Fiber專案。既然AdWords是Goolge重要的吸金利器,自然Angular不太可能突然夭折。 功能如前文提到的,Angular本身會比React自帶很多的功能,當然,更豐富的功能對於一個框架來說,是優點也有可能是缺點。兩個框架都具備一些相同的核心功能:元件化、資料綁定、平台無關的Render機制。 AngularAngular除了提供一些需要最新瀏覽器支援的功能外,同時提供以下標準功能:
功能豐富的好處就是你不需要額外費精力去挑選第三方的類別庫,然而,這也同樣讓你沒得選擇,即使你並不需要這些功能(最新發布的Angular4似乎已經意識到了這個問題)React
可以根據自己的需求很自由(或自訂)所需的類別庫,同時這些第三方的類別庫都是很容易學習的。
語言與模式隨著兩個框架的流行,一些概念和技術也隨著浮出,如果想真正的用好或掌握這兩個框架,了解隨之而出的這些概念或技術是非常必要的: ReactJSXJSX是一個很有爭議的話題:有些人喜歡它,而其他人認為這是一個很大的退步。 React決定使用一種類似XML的語言在元件中把標記和程式碼結合起來,直接在JavaScript程式碼中編寫HTML標記。 儘管混合標記與JavaScript的話題可能是有爭議的,但它具有無可爭議的優點:靜態分析。如果在JSX標記中發生錯誤,編譯器會立即報錯而不是留待運行時出現莫名其妙的問題。這有助於開發人員快速排除錯誤以及避免其它愚蠢的錯誤,例如拼字錯誤。 FlowFlow是由Facebook開發的JavaScript類型檢查工具。它可以解析程式碼並檢查常見的類型錯誤,例如隱式轉換或取消引用。 與類似目的的TypeScript不同,它不需要開發人員遷移到新語言,並為你的程式碼註解類型檢查工作。在流程中,類型註釋是可選的,可用於向分析器提供其他提示。如果你想使用靜態程式碼分析,同時避免重寫現有的程式碼,Flow是一個很好的選擇。 ReduxRedux是一個可以以清晰的方式管理狀態變化的函式庫。它的靈感來自Flux,但有一些簡化。 Redux的關鍵思想在於,應用程式的整個狀態由單一物件表示,該物件由名為reducers的函數進行突變。 Reducers本身就是純功能,與元件分開實現。這樣可以更好地分離問題和測試。 如果你正在進行一個簡單的項目,那麼引入Redux可能有點得不償失,但對於中等和大型項目來說,這是一個很好的選擇。 AngularTypeScriptTypeScript是一種基於JavaScript開發並由Microsoft開發的新語言。它是JavaScript ES2015的超集,並包含較新版本的語言的功能。你可以使用它而不是Babel來寫最先進的JavaScript。它還可以透過使用註解和類型推斷的組合來靜態分析你的程式碼。 還有一個更微妙的好處。 TypeScript受到Java和.NET的嚴重影響,所以如果你的開發人員有這些語言之一的背景知識,他們可能會比簡單的JavaScript更容易找到TypeScript(請注意我們如何從工具切換到你的個人環境) 。 雖然Angular是第一個積極採用TypeScript的主要框架,但它也可以與React一起使用。 RxJSRxJS是一個響應式程式庫,可以靈活地處理非同步操作和事件。它是將Observer和Iterator模式與功能編程結合的組合。 RxJS允許您將任何東西視為連續的流,並對其進行各種操作,例如映射,過濾,拆分或合併。 該類別庫已被Angular採用其HTTP模組以及一些內部使用。當您執行HTTP請求時,它會傳回一個Observable,而不是通常的Promise。 雖然這個類別庫非常強大,但也很複雜。要掌握它,您將需要了解不同類型的“可觀察”,“主題”以及大約一百種方法和操作符 。 當您使用連續資料流(如Web套接字)工作很多的情況下,RxJS非常有用,但是對於其他任何東西來說似乎過於複雜。 無論如何,當你使用Angular時,你至少應該了解RxJS的基本知識。
TypeScript可以說是Angular中非常重要的特點,首先他給原本C#/Java開發人員提供了很容易進入前端的機會,另外TypeScript也想比JavaScript更容易理解,尤其是程式碼量或業務複雜的專案中。
生態系統開源框架這麼受歡迎的原因之一,就是圍繞著他們,會有無數的工具、類別庫、擴充來支撐整個框架,有時,這些工具可能比框架本身更有幫助,接下來我們就來看看相關這兩個框架最受歡迎的工具和類別庫。 AngularAngular CLI現代框架的流行趨勢是使用CLI工具,可以幫助您引導項目,而無需自行配置建置。 Angular有Angular CLI。它允許您僅使用幾個命令來產生和運行專案。負責建置應用程式的所有腳本,啟動開發伺服器和執行測試都會在node_modules中隱藏。您也可以在開發過程中使用它來產生新的程式碼。這使得新項目的設定變得輕而易舉。 Ionic 2Ionic 2 是開發混合行動應用程式的流行框架的新版本。它提供了一個與Angular 2完美整合的Cordova容器,以及一個漂亮的材料組件庫。 使用它,您可以輕鬆地設定和建立行動應用程式。 如果您喜歡使用混合應用程序,那麼這是一個不錯的選擇。 Material design components如果您熱衷於設計Material,您會很高興聽到Angular有一個Material元件庫。 Angular universalAngular universal是一個種子項目,可用來建立支援伺服器端渲染的項目。 @ngrx/store@ngrx/store是由Redux啟發的Angular的狀態管理函式庫,基於由pure reducer進行突變的狀態。它與RxJS的整合可讓您利用推送變更偵測策略來獲得更好的效能。 關於更多的有關Angular相關類別庫和工具可以參考:the Awesome Angular list ReactCreate React AppCreate-react- app 是一個CLI工具,用於快速建立新的React應用程式。可以產生一個新的工程,啟動開發伺服器並建立綁定。 Jest(來自Facebook的一個單元測試工具)也同時整合在Create-react-app內部,更方便的讓我們進行單元測試。 React NativeReact Native 是Facebook開發的基於React在行動裝置上的開發平台,借助此平台,React可以創建真正的Native的UI。提供了一系列標準的React元件用於綁定。同時允許創建自己的組件並與Objective-C、Java或Swift的程式碼進行綁定。 Material UI還有一個可用於React的Material Design Component。與Angular的版本相比,這個版本比較成熟,可以使用更廣泛的元件。 Next.jsNext.js 是React應用程式的伺服器端呈現的框架。它提供了一種在伺服器上完全或部分呈現應用程式的靈活方式,將結果傳回給客戶端並在瀏覽器中繼續。它試圖使創建通用應用程式的複雜任務盡可能簡單,所以設定被設計為盡可能簡單,最少量的新原語和對專案結構的要求。 MobXMobX 是用來管理應用程式狀態的替代函式庫。不像Redux那樣將狀態保存在一個不可變的儲存中,它鼓勵您僅儲存最低限度的必需狀態,並從中獲取剩餘的資料。它提供了一組裝飾器來定義可觀察和觀察者,並將反應邏輯引入你的狀態管理程式碼中。 StorybookStorybook是React的元件開發環境。它允許您快速設定單獨的應用程式來顯示您的元件。除此之外,它提供了許多附加元件來記錄,開發,測試和設計您的元件。 同樣的,可以從Awesome React list了解更多的工具和類別庫。
學習曲線與開發體驗選擇新技術的一個重要標準是學習它是否容易。當然,答案取決於廣泛的因素,例如您先前的經驗和對相關概念和模式的普遍了解。如果我們假設你已經知道ES6 +,建立工具和所有這些,讓我們來看看你還需要了解什麼。 React有了React,你會遇到的第一件事就是JSX。對於一些開發人員來說似乎剛開始會覺得很彆扭,但它並沒有增加複雜性; 只是表達式,實際上還是JavaScript,還有一個特殊的類似HTML的語法。您還需要學習如何編寫元件,使用props進行配置和管理內部狀態。不需要學習任何新的邏輯結構或循環,因為這一切都是純JavaScript。 官方教學是開始學習React的好地方。一旦完成了官方教程,接下來應該熟悉並掌握React的路由機制 。 React Router v4版本可能稍微複雜且非常規,但也不許太過擔心。 使用Redux將需要一個範式的轉變,免費入門Redux影片課程可以快速介紹核心概念。根據專案的大小和複雜性,找到並學習一些額外的庫,這可能是棘手的一部分,但之後,一切都應該變得順利。 其實,React的上手非常容易,最困難的部分可能是如何挑選合適你專案或產品的類別庫。 AngularAngular將向您介紹比React更多的新概念。首先,您需要使用TypeScript。對於具有靜態類型語言(如Java或.NET)經驗的開發人員,這可能比JavaScript更容易理解,但對於純JavaScript開發人員,這可能需要一些額外的學習。 框架本身豐富的技術主題可以從諸如模組,依賴注入、裝飾器、組件、服務、管道、模板和指令等基礎開始,到更高級的主題,如更改檢測,區域,AoT編譯和RxJS。這些都在文檔中。 RxJS是一個很重的話題,在官方網站上有詳細描述。雖然在基本功能層面上使用起來相對容易,但在轉到高階應用程式時會變得更加複雜。 總而言之,我們注意到Angular的進入障礙高於React。新概念的數量絕對令新來者感到困惑。又是碰到一些問題還得谷歌後才能找到答案,但是,就像之前說的,是否合適,還是取決於更多的因素。
前景Angular就在2017年的3月,Angular已經發布了4.0的版本(相容2.x版本),關於為什麼是4.0,官方的解釋是因為Router這個主要核心元件的版本已經是4.0.0,如果Angular還用3.0會造成混淆,如下圖:
4.0版本中主要是大幅度的減少了程式碼體積(60%),同時提高了加載的速度(肉眼可查的程度),同時報錯的資訊更清晰了。根據官方的文檔,Angular的版本升級會以比較快的速度進行迭代
#無論是大版本的6個月迭代,還是每週的hotfix,能看出Angular團隊想用快速升級的策略迅速佔領市場。 React反觀React的升級倒是非常謹慎的,這從最新的v15.5.0的發布新聞博客中就能看出 不過,從部落格能看到React即將迎來v16,不知道整個重寫的React會帶給我們什麼驚喜。不過,需要提一下的是Facebook已經與去年底的時候發布了React VR,有興趣的同學可以圍觀以下。
契合度無論是哪個框架,適合自己的才是「好「的,所以需要你從專案(產品)本身的角度去衡量,以下的問題清單可能並不全面,但至少可以作為一個開始
如果您正在進行一個大型項目,並希望盡可能減少錯誤選擇的風險,請考慮先建立一個demo用於驗證產品概念。選擇專案的一些主要功能,並嘗試使用其中一個框架以簡單的方式實現它們。 Demo通常不會(也不應該)花費很多時間,但會提供一些寶貴的經驗,可以幫助您驗證關鍵的技術要求。如果對結果感到滿意,可以繼續全面建構。如果沒有,會給你充分的時間重新選擇。在專案髮開過程中,你也可以藉助一些支援Angular和React的開發工具來提高開發效率,如Wijmo,這是一款為企業應用程式開發而推出的一系列包含 HTML5 和 JavaScript 的開發控制項集。無論你的應用程式是行動端、PC端、或必須支援IE6,Wijmo Enterprise 均能滿足需求。
總結透過以上的6個面向對比了React和Angular這兩個目前最熱的前端框架,希望能對你在選擇時提供一些參考。但是否真的是適合自己的,或許真的需要用過才知道 |
以上是React Vs ArgularJs對比用法實例總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!