JavaScript 框架對比及案例(React、Vue 及 Hyperapp) | Linux 中國

2021-02-13 Linux

請訪問文末的「原文連結」獲得可點擊的文內連結、全尺寸原圖和相關文章。編譯自 | 
https://hackernoon.com/javascript-framework-comparison-with-examples-react-vue-hyperapp-97f064fb468d 
 作者 | Angelos Chalaris
 譯者 | Bestony (bestony) 🌟🌟🌟共計翻譯:21 篇 貢獻時間:969 天

在我的上一篇文章中[1],我試圖解釋為什麼我認為 Hyperapp[2] 是一個 React[3] 或 Vue[4] 的可用替代品,原因是,我發現它易於起步。許多人批評這篇文章,認為它自以為是,並沒有給其它框架一個展示自己的機會。因此,在這篇文章中,我將儘可能客觀的通過提供一些最小化的例子來比較這三個框架,以展示它們的能力。

耳熟能詳的計時器例子

計時器可能是響應式編程中最常用的例子之一,極其易於理解:

◈ 你需要一個變量 count 保持對計數器的追蹤。◈ 你需要兩個方法來增加或減少 count 變量的值。◈ 你需要一種方法來渲染 count 變量,並將其呈現給用戶。◈ 你需要掛載到這兩個方法上的兩個按鈕,以便在用戶和它們產生交互時變更 count 變量。

下述代碼是上述所有三個框架的實現:

使用 React、Vue 和 Hyperapp 實現的計數器

這裡或許會有很多要做的事情,特別是當你並不熟悉其中的一個或多個步驟的時候,因此,我們來一步一步解構這些代碼:

◈ React 更推崇面向對象的範式,就是創建一個 Counter 組件的 class。Vue 遵循類似的範式,通過創建一個新的 Vue 類的實例並將信息傳遞給它來實現。最後,Hyperapp 堅持函數範式,同時完全彼此分離 view、state和action。◈ 就 count 變量而言, React 在組件的構造函數內對其進行實例化,而 Vue 和 Hyperapp 則分別是在它們的 data 和 state 中設置這些屬性。◈ 繼續看,你可能注意到 React 和 Vue 有相同的方法來與 count 變量進行交互。 React 使用繼承自 React.Component 的 setState 方法來修改它的狀態,而 Vue 直接修改 this.count。 Hyperapp 使用 ES6 的雙箭頭語法來實現這個方法,而據我所知,這是唯一一個推薦使用這種語法的框架,React 和 Vue 需要在它們的方法內使用 this。另一方面,Hyperapp 的方法需要將狀態作為參數,這意味著可以在不同的上下文中重用它們。◈ 這三個框架的渲染部分實際上是相同的。唯一的細微差別是 Vue 需要一個函數 h 作為參數傳遞給渲染器,事實上 Hyperapp 使用 onclick 替代 onClick ,以及基於每個框架中實現狀態的方式引用 count 變量。◈ 最後,所有的三個框架都被掛載到了 #app 元素上。每個框架都有稍微不同的語法,Vue 則使用了最直接的語法,通過使用元素選擇器而不是使用元素來提供最大的通用性。

計數器案例對比意見

同時比較所有的三個框架,Hyperapp 需要最少的代碼來實現計數器,並且它是唯一一個使用函數範式的框架。然而,Vue 的代碼在絕對長度上似乎更短一些,元素選擇器的掛載方式是一個很好的增強。React 的代碼看起來最多,但是並不意味著代碼不好理解。

使用異步代碼

偶爾你可能需要處理異步代碼。最常見的異步操作之一是發送請求給一個 API。為了這個例子的目的,我將使用一個[佔位 API] 以及一些假數據來渲染一個文章列表。必須做的事情如下:

◈ 使用一個方法和正確的 URL 來調用 fetch() ,等待返回數據,轉化為 JSON,並最終使用接收到的數據更新 posts 變量。

從一個 RESTFul API 抓取數據

讓我們分解上面的代碼,並比較三個框架:

◈ 與上面的技術裡例子類似,這三個框架之間的存儲狀態、渲染視圖和掛載非常相似。這些差異與上面的討論相同。◈ 在三個框架中使用 fetch() 抓取數據都非常簡單,並且可以像預期一樣工作。然而其中的關鍵在於, Hyperapp 處理異步操作和其它兩種框架有些不同。當數據被接收到並轉換為 JSON 時,該操作將調用不同的同步動作以取代直接在異步操作中修改狀態。◈ 就代碼長度而言,Hyperapp 依然只用最少的代碼行數實現了相同的結果,但是 Vue 的代碼看起來不那麼的冗長,同時擁有最少的絕對字符長度。

異步代碼對比意見

無論你選擇哪種框架,異步操作都非常簡單。在應用異步操作時, Hyperapp 可能會迫使你去遵循編寫更加函數化和模塊化的代碼的方式。但是另外兩個框架也確實可以做到這一點,並且在這一方面給你提供更多的選擇。

To-Do 列表組件案例

在響應式編程中,最出名的例子可能是使用每一個框架裡來實現 To-Do 列表。我不打算在這裡實現整個部分,我只實現一個無狀態的組件,來展示三個框架如何創建更小的可復用的塊來協助構建應用程式。

示例 TodoItem 實現

上面的圖片展示了每一個框架一個例子,並為 React 提供了一個額外的例子。接下來是我們從它們四個中看到的:

◈ React 在編程範式上最為靈活。它支持函數組件,也支持類組件。它還支持你在右下角看到的 Hyperapp 組件,無需任何修改。◈ Hyperapp 還支持 React 的函數組件實現,這意味著兩個框架之間還有很多的實驗空間。◈ 最後出現的 Vue 有著其合理而又奇怪的語法,即使是對另外兩個框架很有經驗的人,也不能馬上理解其含義。◈ 在長度方面,所有的案例代碼長度非常相似,在 React 的一些方法中稍微冗長一些。

To-Do 列表項目對比意見

Vue 需要花費一些時間來熟悉,因為它的模板和其它兩個框架有一些不同。React 非常的靈活,支持多種不同的方法來創建組件,而 HyperApp 保持一切簡單,並提供與 React 的兼容性,以免你希望在某些時刻進行切換。

生命周期方法比較

另一個關鍵對比是組件的生命周期事件,每一個框架允許你根據你的需要來訂閱和處理事件。下面是我根據各框架的 API 參考手冊創建的表格:

生命周期方式比較

◈ Vue 提供了最多的生命周期鉤子,提供了處理生命周期事件之前或之後發生的任何事件的機會。這能有效幫助管理複雜的組件。◈ React 和 Hyperapp 的生命周期鉤子非常類似,React 將 unmount 和 destory 綁定在了一起,而 Hyperapp 則將 create 和 mount 綁定在了一起。兩者在處理生命周期事件方面都提供了相當多的控制。◈ Vue 根本沒有處理 unmount (據我所理解),而是依賴於 destroy 事件在組件稍後的生命周期進行處理。 React 不處理 destory 事件,而是選擇只處理 unmount 事件。最終,HyperApp 不處理 create 事件,取而代之的是只依賴 mount 事件。

生命周期對比意見

總的來說,每個框架都提供了生命周期組件,它們幫助你處理組件生命周期中的許多事情。這三個框架都為它們的生命周期提供了鉤子,其之間的細微差別,可能源自於實現和方案上的根本差異。通過提供更細粒度的時間處理,Vue 可以更進一步的允許你在開始或結束之後處理生命周期事件。

性能比較

除了易用性和編碼技術以外,性能也是大多數開發人員考慮的關鍵因素,尤其是在進行更複雜的應用程式時。js-framework-benchmark[5] 是一個很好的用於比較框架的工具,所以讓我們看看每一組測評數據數組都說了些什麼:

測評操作表

◈ 無主鍵的 React 在所有六種對比中擁有最強的性能,它在所有測試上都有令人深刻的表現。◈ 有主鍵的 Vue 只比有主鍵的 React 性能稍強,而無主鍵的 Vue 要比無主鍵的 React 性能明顯差。◈ Vue 和 Hyperapp 在進行局部更新的性能測試時遇見了一些問題,與此同時,React 似乎對該問題進行很好的優化。

啟動測試

◈ Hyperapp 是三個框架中最輕量的,而 React 和 Vue 有非常小的大小差異。◈ Hyperapp 具有最快的啟動時間,這得益於它極小的大小和極簡的 API◈ Vue 在啟動上比 React 好一些,但是差異非常小。

內存分配測試

◈ Hyperapp 是三者中對資源依賴最小的一個,與其它兩者相比,任何一個操作都需要更少的內存。◈ 資源消耗不是非常高,三者都應該在現代硬體上進行類似的操作。

性能對比意見

如果性能是一個問題,你應該考慮你正在使用什麼樣的應用程式以及你的需求是什麼。看起來 Vue 和 React 用於更複雜的應用程式更好,而 Hyperapp 更適合於更小的應用程式、更少的數據處理和需要快速啟動的應用程式,以及需要在低端硬體上工作的應用程式。

但是,要記住,這些測試遠不能代表一般場景,所以在現實場景中可能會看到不同的結果。

額外備註

比較 React、Vue 和 Hyperapp 可能像在許多方面比較蘋果、橘子。關於這些框架還有一些其它的考慮,它們可以幫助你決定使用另一個框架。

◈ React 通過引入片段[6],避免了相鄰的 JSX 元素必須封裝在父元素中的問題,這些元素允許你將子元素列表分組,而無需向 DOM 添加額外的節點。◈ React 還為你提供更高級別的組件[7],而 VUE 為你提供重用組件功能的 MIXIN[8]。◈ Vue 允許使用模板[9]來分離結構和功能,從而更好的分離關注點。◈ 與其它兩個相比,Hyperapp 感覺像是一個較低級別的 API,它的代碼短得多,如果你願意調整它並學習它的工作原理,那麼它可以提供更多的通用性。

結論

我認為如果你已經閱讀了這麼多,你已經知道哪種工具更適合你的需求。畢竟,這不是討論哪一個更好,而是討論哪一個更適合每種情況。總而言之:

◈ React 是一個非常強大的工具,圍繞它有大規模的開發者社區,可能會幫助你找到一個工作。入門並不難,但是掌握它肯定需要很多時間。然而,這是非常值得去花費你的時間全面掌握的。◈ 如果你過去曾使用過另外的 JavaScript 框架,Vue 可能看起來有點奇怪,但它也是一個非常有趣的工具。如果 React 不是你所喜歡的,那麼它可能是一個可行的、值得學習的選擇。它有一些非常酷的內置功能,其社區也在增長中,甚至可能要比 React 增長還要快。◈ 最後,Hyperapp 是一個為小型項目而生的很酷的小框架,也是初學者入門的好地方。它提供比 React 或 Vue 更少的工具,但是它能幫助你快速構建原型並理解許多基本原理。你為它編寫的許多代碼和其它兩個框架兼容,要麼立即能用,或者是稍做更改就行,你可以在對它們中另外一個有信心時切換框架。

作者簡介:

喜歡編碼的 Web 開發者,「30 秒編碼」 ( https://30secondsofcode.org/ )和 mini.css 框架( http://minicss.org ) 的創建者。

via: https://hackernoon.com/javascript-framework-comparison-with-examples-react-vue-hyperapp-97f064fb468d

作者:Angelos Chalaris [13]
譯者:Bestony
校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關焦點

  • 前端技術:React&Vue對比
    React和vue的業務邏輯是差不多,vue在react上封裝了更簡潔的方法,使用起來更加的便捷,如:提供了便捷的指令(v-for,v-if,v-model),還提供了更多的屬性(computed,watch),我還是比較喜歡用react的,更接近js原生,更容易於理解它。
  • 三個JavaScript框架重量級:Angular,React和Vue
    你可能知道這三個JavaScript框架重量級,但哪一個是正確的?嘗試查看使用每個框架構建的相同應用程式並進行自己的評估。在這篇文章中,我們提出了一個使用三種不同框架開發三次的開源參考應用程式:React,Vue和Angular。
  • 框架React vs Vue
    首先聲明,沒有任何個人因素,只單純的花了幾周把2個框架的官方文檔看了遍和Demo寫了遍,純粹個人意見;如果熟悉了任何一個框架,完全就必要去學習另外一個,因為2個都很優秀啊。如果你有類似Tab/Navigation,而不想重新渲染,選Vuevue路由官方支持Keep-alive react路由暫時不支持,需要有第3方的狀態管理/或者其他路由來代替,你還需要自己記錄滾到位置,實在有點反人類。
  • 手把手教你用JS/Vue/React實現幸運水果機(80後情懷之作)
    項目體驗地址免費視頻教程分別使用原生JS,Vue和React,手把手教你開發一個H5小遊戲,快速上手Vue和React框架的使用。課程目標我們使用原生JS,Vue和React三種開發方法,來開發一個集趣味性與技術性於一體的H5小遊戲,通過這個小遊戲的開發,我們在鞏固常用的CSS和JS知識的同時,可以深刻地體會到Vue和React這種MVVM模式的框架的開發思想以及優於傳統DOM操作的地方,並且可以快速上手Vue和React這兩種當前最火熱的前端框架的使用
  • Angular、React、Vue,誰能成為2021年JavaScript最佳框架?
    要回答這個問題有點困難,在軟體開發行業中有大量可用的語言和框架。JavaScript已經成為大多數開發流程的支柱,所以我想對三種基於JavaScript的框架進行比較,我選擇的是Angular、React和Vue三種框架。StackOverflow調查
  • 什麼是MVVM,MVC和MVVM的區別,MVVM框架VUE實現原理
    在過去的10年中,我們已經把很多傳統的服務端代碼放到了瀏覽器中,這樣就產生了成千上萬行的javascript代碼,它們連接了各式各樣的HTML 和CSS文件,但缺乏正規的組織形式,這也就是為什麼越來越多的開發者使用javascript框架。比如:angular、react、vue。
  • 快速在你的vue/react應用中實現ssr(服務端渲染)
    摘要ssr(服務端渲染)技術實現方案接下來筆者將列舉幾個常用的基於vue/react的服務端渲染方案,如下:使用next.js/nuxt.js的服務端渲染方案>使用node+vue-server-renderer實現vue項目的服務端渲染使用node+React renderToStaticMarkup實現react項目的服務端渲染傳統網站通過模板引擎來實現ssr(比如ejs, jade, pug等)
  • 前端諸神大戰,Vue、React 依舊笑傲江湖
    【編者按】如今的前端框架市場基本由 React、Angular 和 Vue.js 佔據。三種框架都有自己獨到的優勢,也有各自的缺陷。那麼,項目搭建框架時該如何選擇才能得到更適合的效果呢?且看本文分析。整理 | 彎月 責編 | 張文頭圖 | CSDN 下載自視覺中國自 2010 年 AngularJS 第一版發布以來,前端框架的發展經歷了十個年頭,前端框架大戰也幾乎告一段落。毫無疑問,現在基本上是 React、Angular(包括 AngularJS 和後來的 Angular)和 Vue.js 三分天下。
  • Vue、React和Angular:該選擇哪個框架?
    在 2018 年,又有一個實力雄厚的玩家加入了這場競爭:Vue.js,它 很直白地表示出了自己 的豪心壯志——立志成為最受歡迎的 JavaScript 框架。 在深入了解這些流行框架的總體比較之前,讓我們先看看它們的起源。
  • Vue、React 和 Angular:該選擇哪個框架?
    本文對三個最流行的 JavaScript 框架進行了全面的比較:Vue、React 和 Angular,如果你是正在開發或者目前正在考慮使用這些流行框架之一來啟動項目的開發人員,我們希望本文對你選擇正確的解決方案能有所幫助。
  • React Hooks 與Vue3.0 Function based API的對比?
    Vue3.0目前還未發布(預計2019年發布),vue官方提供了Vue Function API[4],支持Vue2.x版本使用組件邏輯復用機制。當3.0發布後,可無縫替換掉該庫。四、React Hooks 與 Vue Function-based API 的對比兩者均具有基於函數提取和復用邏輯的能力。React Hooks 在每次組件渲染時都會調用,通過隱式地將狀態掛載在當前的內部組件節點上,在下一次渲染時根據調用順序取出。
  • 前端框架VUE,理解這一點,快速成為大咖
    前端三大框架angular、react、vue,然而vue是集中之一,框架難易程度就是angular大於react大於vue。只要你會前端三大框架之一和後端Java開發,你就成為了全棧開發工程師。框架只學精一個就行,其他的都是相通的,正如程式語言一樣,通一門則掌握其他任何程式語言。
  • Vue、React、Angular之三國殺,web前端入坑第六篇(上)
    vue、react、angular對比和選擇 這個話題我在vue1.x 時代 2016年 就想寫了,可時光如梭,懶癌侵身,一個擱淺便是這麼多天。vue都2.5了,angular 都變成了另外一種框架了,不敢想,不敢想, JavaScript 開發框架發展的是如此之快。如果有不知道mvvm概念的同學,請先回顧我 入坑第五篇: 秒懂前端框架歷史和MVVM框架原理!
  • Vue.js 很難學?看看這個由 DCloud 與 Vue 官方合作推出的免費入門...
    這對於微小項目可能沒什麼感覺,甚至還很方便,但對於中大型但項目,更適合工程化開發模式的 Vue/react ,只要學會了就真的不會再回去了。這套在線觀看的免費入門視頻教程就是給你們準備的。Vue.js 是目前國內很火的前端框架,前端工程師招聘幾乎都要求掌握。
  • 多角度對比React和Vue
    工作流程  Vue沒有正式的create-react-app,但有社區構建的create-vue-app。啟動項目的官方建議是vue-cli。它可從簡單項目通過HTML文件生成任何內容到完整的webpack+server-side rendering項目:  $ vue init template-name project-name  單個HTML文件項目  Vue的創造者Evan You將其項目稱為「漸進式框架」,因為它可為複雜的應用程式進行擴展,或者為簡單應用程式進行縮小
  • React、Angular和Vue三種最流行的前端框架哪一個最好?
    庫或框架?因此,在深入比較之前,我們首先需要確定哪一個是必需的 - 一個庫或一個框架?實際上,庫被設計來執行一些特定的任務,而且通常並不複雜。因此,如果我們使用庫來構建我們的應用程式,那麼我們需要為每個任務選擇一個庫,以及設置任務運行者。庫的主要優點是我們可以完全控制應用程式。
  • JavaScript能應用在哪些方向?未來前景怎麼樣?
    網頁開發css,javascript,html。網頁開發的三劍客,是每個人網頁前端開發者都必須要掌握的,而作為web2.0動態交互開發的主力軍,JavaScript開發也開始受到越來越多的人重視,不可計數的框架層出不窮,從早期的dojo,prototype,jquery,到現在的vue,angular,react,開發者們對於js框架的研究開發也從未停止腳步,在可見的未來,也會相繼有更多的框架面世。
  • 適合Vue用戶的React教程,你值得擁有(二)
    今天這篇文章將會對Vue2,Vue3,React的一些用法進行對比,方便小夥伴們學習。數據data,在react中叫state熟悉vue的小夥伴一定對Vue中的data不會感到陌生的,反正天天寫Bug的時候都要用,但是對於data來說,在Vue2.0,Vue3.0,React中用法是不同的,我們下面依次舉例說明Vue2.0中的用法如下代碼是一個比較簡單的Vue2.0的data
  • 對比 12,000 個 Vue.js 開源項目發現最實用的 TOP45!
    2019 更是熱度不減,而作為近年來尤為熱門的前端框架,Vue.js 自是積累了大量關注。本文將為你介紹 2019 年最值得關注的 45 個 Vue.js 開源項目——Let's go!Vue-styleguidistStar 數:1088GitHub:https://github.com/vue-styleguidist/vue-styleguidist介紹:由 react-styleguidist
  • kpc v0.7.8 發布,同時支持 Vue/React/Intact 的前端組件庫
    眾所周知, 前端單頁應用的開發無非基於3大框架:React/Vue/Angular。如果不同框架維護一套自己的組件庫,一方面 維護成本非常高,存在大量重複勞動力;另一方面,即使大家都按統一的互動設計稿開發組件庫,也很難保證 各個組件庫交互和設計的完全統一。