十年之後,前端開發是否進入了後 React 時代

娛樂頭條 1191℃
作者丨 richard macmanus
譯者丨明知山
策劃丨 tina
2014 年 oscon 大會上的一次關於 react 的演講產生了深遠的影響。十年後的今天,我們再次審視 react 背後的理念,並探討它在 2024 年的適用性。

十年前,facebook 開發者 christopher chedeau 在 o'reilly 開源大會上發表演講,介紹了當時新興的 javascript 框架 react。正如 the new stack 的 chris dawson 當時所評論的,這次演講引人入勝,因為它深入闡釋了 react 的核心理念——不僅解釋了工作原理,還說明了為什麼要開發這個框架。

自 2014 年 oscon 大會以來,react 在前端開發領域確立了其領導地位,在本文中,我將重新審視 react 的核心理念,並評估它在當今技術環境中的是否仍然經久不衰。這在 2024 年尤其重要,因為一些主流的軟體產品,例如微軟的 edge,開始探索一種我稱之為後 react 方法的 web 開發方法,即微軟 edge 團隊所謂的「html 優先」策略。此外,像 svelte 和 solid 這樣的非 react 框架也為前端開發者提供了越來越可行的替代方案。

1 為什麼 react 在 2014 年席捲了 web 開發領域

在 2014 年的演講中,chedeau 闡釋了 react 的起源,也就是 facebook 在 2010 年 2 月作為開源軟體發布的 php 擴展 xhp。chedeau 說:「我們擴展了 php 語法,使其能夠嵌入 xml」。這主要是出於提高安全性的考慮,同時也帶來了「非常快速的迭代周期」。

然而,因為 php 是一種伺服器端語言,每次有變化時,頁面都需要進行完整的重新渲染。為了避免伺服器與客戶端之間頻繁的往返,facebook 團隊決定將 xhp 的很多應用程序邏輯遷移到 javascript 中,畢竟 javascript 這是瀏覽器的本地腳本語言。然後,他們開始探索如何進一步優化 javascript 來提升性能和體驗。

「我傾向於將 react 視為對 dom 的版本控制」

 —— christopher chedeau,2014 年

他們最終開發出了一個叫作 react 的 javascript 庫:關鍵創新是引入了「虛擬 dom」的概念。dom,即文檔對象模型,正如 wikipedia所解釋的,是「html 文檔的對象化表示,充當了 javascript 和文檔之間的橋樑。」

正如 chedeau 所解釋的,react 提供了兩個「虛擬」的 dom 副本(交互前和交互後各一個),通過一個「差異」比較過程就可以識別出實際發生的變化。然後,react 將這些變化應用到實際的 dom 中——這意味著只有 dom 的一部分發生更新,其餘部分保持不變。這也意味著只有網頁的一部分需要重新渲染。

十年之後,前端開發是否進入了後 React 時代 - 陸劇吧

facebook 開發者 christopher chedeau 在 2014 年的 oscon 大會上介紹 react

chedeau 使用了一個巧妙的比喻來總結 react 的好處:「我傾向於將 react 視為對 dom 的版本控制」。因此我們可以說 react 有點像前端的 git。

另一個創新是 jsx(javascript xml,即 javascript 語法擴展),這是一種 xml 風格的 javascript 語法擴展。早在 2013 年,facebook 的 pete hunt 就對 jsx 進行過描述,並將其定位為一種「可選的語法擴展,旨在為那些更偏愛 html 的可讀性而非純 javascript 的開發者提供便利。」

react 背後的一個核心理念是,它不基於模板,這與之前流行的框架(如 ruby on rails 和 django)不同。正如 hunt 所指出的,「react 採用了一種不同的方法來構建用戶界面——將界面分解為獨立的組件,這意味著 react 使用了一個真正的、全功能的編程語言來渲染視圖。」

react 確實提供了一種革命性的 web 應用開發方法——特別適合那些數據頻繁變化的大型應用程序。這引起越來越多開發者的注意,react 在 2014 年的採用率開始顯著增長。2014 年 5 月,mozilla 的開發者 james long 在一篇題為「去除用戶界面複雜性——為什麼說 react 很棒」的文章中表達了對 react 的樂觀情緒。

2 react 的批評者

儘管廣受好評,但不久之後,開始有人對 react 提出批評。到了 2015 年底,一些開發者因為陡峭的學習曲線而感到「疲憊」。2015 年 12 月,eric clemmons 在他的文章) 中寫道:

「最終的問題在於,當你選擇了 react(及其固有的 jsx 語法),實際上是在開始開發之前無意中跳入了一個由構建工具、樣板文件、代碼檢查器和時間黑洞構成的陷阱。」

開發者還對 react 管理狀態的處理方式提出了質疑。2016 年 8 月,charlie crawford 在 the new stack 上發表了 觀點:

「當組件樹變得龐大,且存在一些位置相距較遠的組件時,如果這些組件並非直接的父子關係,並且兩個組件都依賴於同一部分狀態,那麼問題就開始出現了。」

到 2017 年,一些有影響力的開發者開始頻繁表達他們對 react 的不滿。2017 年 8 月,當時在谷歌 chrome 團隊工作的 alex russell 反駁了虛擬 dom 速度快的觀點:

「從來沒有任何確鑿的事實基礎可以證明虛擬 dom 的速度「快」,現在同樣如此。它實際上是以犧牲空間為代價來換取便利性,而非速度。」

十年之後,前端開發是否進入了後 React 時代 - 陸劇吧

瀏覽器開發者 alex russell 一直是 react 的批評者,經常在社交媒體上表達他的不同意見

2019 年 6 月,russell 再次發聲,指出 react 的「diffing」演算法實際上比其它框架慢:

「結果表明 diffing 確實慢!其他框架通過採取不同的方法實現了更快的速度(如 svelte、lit、vue 等),而且它們在提供相似的表面語法的同時具有更小的體積。

3 react 的捍衛者

在過去的十年里,開發者對 react 的一些抱怨已經逐漸減少或得到了妥善解決。例如,學習曲線現在不再是一個大問題——自 2014 年以來,許多新的前端開發者湧入,許多人的起點便是學習 react。對於狀態管理問題,也有了好的解決方案,比如 redux 或 react 的 context api。

即使可能面臨性能方面的挑戰,react 依然擁有堅定的支持者,vercel 公司便是其中之一,它運行著行業領先的 react 框架 next.js。2023 年 7 月,vercel 發表了一篇關於 react 18 的長博文,這是 react 的當前穩定版本。文章概述了「如何利用並發特性,如 transitions、suspense 和 react server components,來提升應用程序性能。」

然而,即使這些特性確實提升了性能,但是否是以複雜性為代價?包括 netlify ceo matt biilmann 在內的一些人對此持有疑問。今年 1 月,biilmann 巧妙利用 vercel ceo guillermo rauch 的一條推文,以諷刺的方式提出了 vercel(以及間接地涉及 react)的複雜性問題。

十年之後,前端開發是否進入了後 React 時代 - 陸劇吧

值得注意的是,netlify 實際上是 vercel 的直接競爭對手!在那次演講中,biilmann 推薦 astro 作為一個更簡潔的框架來替代 next.js。雖然 astro 允許用戶集成 react,但他們也可以選擇其他 ui 框架,比如 vue、svelte 和 solid。

最近,netlify 和 astro 宣布了一項正式的合作夥伴關係——所以我們可以期待 netlify 在推廣「保持簡潔」的理念上發揮更大作用。

4 結論:真的要進入後 react 時代了嗎?

現在就宣稱我們已經邁入後 react 時代可能還為時尚早,因為 react——以及像 next.js 這樣的相關框架——仍然廣受歡迎。但不可否認的是,開發者現在有了更多的選擇。astro 和 svelte 都不使用虛擬 dom,所以開發者可以選擇一個不依賴 react 的 web 框架(儘管 astro 仍然保留集成 react 的能力)。

微軟的 edge 團隊正在推動一種「html 優先」的方法,alex russell(他是那個團隊的成員)將其描述為「現代 web components 加 html 優先的架構」。

不管怎樣,前端開發不再像幾年前那樣與 react 緊密綁定。如果你是剛進入這個行業的 web 開發者,甚至可以考慮完全不使用 react——儘管這可能會在短期內影響你的就業機會。但至少這是一個值得認真考慮的選項,它或許能幫你吸引到那些具有前瞻性眼界的僱主,從而為你的職業生涯開闢新的道路。

聲明:本文由 infoq 翻譯,未經許可禁止轉載。

標籤: 娛樂頭條