HeyBinyang

React Native 0.85:站在新架構上的一次「打磨版」升級

·技術·visibility12 閱讀 ·開發·React

React Native 0.85 發佈的時候,官方沒有給出那種「革命性」的宣傳語,因為這次更新本質上是在新架構已經落地的前提下,對動畫、偵錯、測試等基礎設施做了一輪系統打磨。

如果你現在正處在技術選型階段,或者考慮從舊版本升級,那麼這一版的訊號是:新架構已經可以視為默認前提,後續工作重心會放在體驗和生態品質上

下面從三個維度展開:0.85 帶來的核心變化、當前 React Native 架構的關鍵點,以及它和 Flutter、Ionic、原生方案在效能與生態上的比較。

0.85 帶來了什麼?

統一的動畫後端:把關鍵路徑拉回「官方掌控」

0.85 最值得一提的是引入了一個共享的動畫後端(Shared Animation Backend)。過去很長一段時間裡,React Native 自帶的 Animated 和社群裡的 Reanimated 實際上是兩個世界:一個偏簡單場景,一個為了效能和表達力把很多邏輯自己接管了。

在 0.85 裡,動畫執行的底層邏輯被下沉到 RN Core,官方和 Software Mansion 一起把動畫排程和執行路徑收斂到一套通用後端。對架構來說,這有幾個現實意義:

  • 動畫排程不再完全依賴「第三方魔法」,核心邏輯進入主幹倉庫,能跟隨 RN 版本做一致性測試和效能最佳化。

  • 原生驅動的覆蓋範圍變大了,佈局相關的屬性可以用 native driver 驅動,這類場景以前經常是「能寫但不敢重度依賴」的部分。

  • 對業務組來說,動畫層的選型壓力會下降一些:可以更放心地用官方和頭部動畫庫的組合,而不用擔心將來誰先跟不上新架構。

如果你的 App 動畫量本來就不大,這件事可能不會立刻改變體驗;但對複雜互動、重動畫產品,這是一個「長期健康度」上的利好。

偵錯鏈路整理:多客戶端、TLS、測試預設拆分

另外幾個變化表面上不那麼顯眼,卻影響到日常開發體驗:

  • 支援多個基於 Chrome DevTools Protocol 的偵錯客戶端並存。簡單講,就是可以同時掛上 React Native DevTools、IDE 外掛、甚至自動化偵錯/AI 工具,而不需要搶同一個「唯一偵錯連線」。

  • Metro dev server 支援 TLS 配置。對很多需要全程 HTTPS/WSS 的企業專案來說,以前本地偵錯要嘛改配置,要嘛搞自簽署代理,現在可以在框架層正面解決。

  • Jest 預設拆成獨立套件。這件事看起來只是目錄結構變化,但對多套件倉庫和跨平台專案很有價值:測試配置不再強耦合在 RN 主套件裡,升級節奏可以更靈活,也更容易統一到公司內部的腳手架裡。

這些改動的共同特點是:沒有突然解鎖什麼炫酷能力,但是能夠減少你在工具鏈上浪費的時間。

當前 React Native 架構的核心認知

如果把版本號擋住,現在討論 React Native,很難繞開「新架構」。簡單回顧一下它的關鍵點,更利於做框架層面的對比。

從 Bridge 到 JSI:溝通方式的換代

老一代 React Native 靠的是一個「橋」:JS 和原生之間透過序列化後的訊息佇列通訊,天然非同步,還要為跨語言傳遞的資料做 JSON 級別的打包和拆包。

新架構用 JSI 把這一層直接換掉:JS 可以拿到 C++ 物件的參考,雙方可以以更接近「直接呼叫」的方式互動。

這帶來的直接結果:

  • 不再被迫把所有呼叫設計成非同步任務,可以按場景選擇同步/非同步。

  • 少了大量序列化/反序列化開銷,在 CPU 緊張或高頻呼叫場景下差別明顯。

  • 可以更自然地把工作分攤到多個執行緒上,而不是把所有事務都擠在描述性很差的「bridge 佇列」裡。

對於選型來說,這意味著:以前那個「bridge 是效能瓶頸」的印象,需要更新成「取決於你怎麼用 JSI 和 TurboModules」。

TurboModules 和 Fabric:模組與渲染的重構

新架構另一側是 TurboModules(新的原生模組系統)和 Fabric(新的渲染器)。

  • TurboModules 強調懶載入和型別安全的跨語言呼叫,配合 Codegen,從 TypeScript/Flow 型別產生 C++ 綁定程式碼,減少膠水層維護成本。

  • Fabric 替換了舊的 UI 管理層,讓渲染流程更一致(包括 Yoga 佈局、diff、commit),並且更好地適配多平台。

對業務方的直接影響是:

  • 自己寫原生模組的成本和心智負擔降低了,尤其是在多平台、多版本共存的大專案裡。

  • 在列表、大量檢視更新的場景下,Fabric 能更穩定地給出可預期的效能表現,減少一些「偶發性」的卡頓和奇怪渲染 bug。

React Native 0.85 沒有在架構上再做翻天覆地的改動,而是預設你已經在這套新架構上,開始向「正常維護期」過渡——這是它在選型層面的關鍵訊號:框架本身的結構基本定型,後續重心會轉向體驗和生態品質,而不是再來一次全面翻修。

效能:React Native 0.85 處在什麼位置?

技術選型繞不開效能,所以接下來把 React Native 與其他路線放在一起看。

和 Flutter 的差異:渲染權與可控性

  • Flutter 自帶渲染引擎(Skia 等),從佈局到繪製全在自己控制下,效能特徵比較清晰:啟動、滾動、動畫一旦調通,結果較穩定,偏「一體機」。

  • React Native 還是使用平台原生元件來渲染 UI,中間多出一層 JS → Native 的呼叫,這層雖然在新架構下已經被壓縮得更薄,但從原理上講仍然存在。

因此在極端效能測試裡,Flutter 通常能給出更好的首屏時間、更平滑的長列表滾動。在複雜 UI 和動畫場景,如果對峰值效能有極致要求,Flutter 會更有把握。

不過對大多數業務 App,瓶頸往往出在資料組織、渲染策略、動畫設計,而不是引擎本身。React Native 新架構 + 新動畫後端,把「能用原生執行的部分」最大化留在原生執行緒,對電商、內容、社群這類主流場景來說,已經足夠撐住體驗。如果你的團隊對 React 更熟,效能差距本身不太會成為一票否決理由。

和 Ionic / WebView 路線:體驗與複用的取捨

  • 像 Ionic 這種框架,本質是 Web 技術棧跑在 WebView 裡,最適合的場景是:已有大量 Web 資產,需要快速給業務補一個「能用」的 App 殼。

  • React Native 的定位更像「用 JS/React 驅動原生控制項」,互動體驗和系統一致性要好得多,例如滾動回饋、手勢、輸入法行為等。

如果專案只需要簡單的資訊展示、表單提交,對動態互動要求不高,Ionic 等方案的成本優勢會很明顯。 但一旦進入「重互動 + 注重體驗」的業務(比如內容社群、電商、工具類應用),React Native/Flutter 這樣的「框架 + 原生」路線會更合適,WebView 路線的邊界會很快暴露出來。

和純原生開發:上限 vs 生產效率

純原生(Swift/Kotlin)不用解釋,效能和系統整合上限最高,對於對延遲極度敏感的場景(遊戲、音視訊處理、車載、人機介面等)仍然是唯一靠譜的選擇。 React Native 這代新架構更多是在縮小「普通業務場景」下與原生的差距,目標是讓絕大多數頁面和互動達到「使用者感覺不出區別」的水準。

從團隊和成本角度看:

  • 一套 React Native 程式碼可以覆蓋 iOS/Android,多端一致性好得多。

  • 有現成 React/Web 團隊的公司,培訓成本低,不需要額外養兩支原生隊伍。

  • 真正需要極致效能的部分,可以透過 TurboModules/Fabric 下沉,用原生寫成模組再接回 RN。

這類混合模式,是現在不少中大廠行動技術棧的現實形態:核心效能敏感模組原生寫,外圍業務 React Native 化,用以拉高迭代效率和統一業務開發模型。

生態:不僅是「庫多不多」的問題

做選型時,框架的生態品質往往比單點效能更影響「長期幸福度」。

React Native:React 生態背書 + 新架構遷移期

React Native 背後是 React 生態,這意味著:

  • 大量跨端通用的狀態管理、資料流、工程實踐可以直接複用。

  • 導覽、手勢、動畫、媒體、地圖等關鍵環節有成熟的主流方案,而且大多已經在向新架構適配。

現實要考慮的點是:新架構的遷移並不是一夜完成的,老庫不更新、半適配的情況仍會遇到。對新專案來說,建議一開始就圍繞「已經明確支援 TurboModules 和 Fabric 的庫」做選型;對老專案,要評估一批核心依賴的維護狀態,再決定升級節奏。

Flutter:一體化程度高,路線清晰

Flutter 的生態更集中在自己的「統一世界」裡:外掛體系和官方元件比較完整,樣式和行為統一度高,桌面/Web 支援也走得比較激進。

它的問題更多是在「走到別的平台」時的體積和引擎負擔,以及團隊是否願意接受 Dart 和 Flutter 獨有的開發範式。

如果你希望未來把一套 UI 儘可能搬到桌面/Web 端,同時能接受包體和技術棧切換的代價,Flutter 是更穩的一條路。

WebView / Ionic:極致複用 vs 上限有限

Ionic 等方案最適合的對象是已經有成熟 Web 前端體系、對行動端體驗要求不高的團隊——快速交付、統一棧、低維護成本是它的主戰場。

問題也很直觀:渲染和互動完全受瀏覽器限制,遇到效能瓶頸時,很難在框架層做太多最佳化,只能在產品和互動設計層面做妥協。

原生:合規與高風險場景的保底選項

在需要強合規、高安全性的行業(金融、醫療、車載、政府專案),原生往往還是更容易走通的道路:平台官方文件齊全、工具鏈成熟、監管和審計更熟悉。

在這類場景下,即便業務層面用 React Native 這樣的跨端方案,也常常會要求關鍵流程落在原生層、或增加額外的安全審查。

最後 - 對架構/選型的現實建議

站在 0.85 這個時間點,如果你在做行動端技術選型,可以按下面幾個問題來篩:

  1. 團隊現狀:React 經驗豐富、Web 資產多,還是可以從空白開始接受 Dart?

  2. 業務特徵:主要是資訊和表單,還是有大量需要流暢互動的複雜介面?

  3. 對效能上限的要求:有沒有必須「無限接近原生」甚至超越的場景?

  4. 對多端統一的預期:只看 iOS/Android,還是希望長遠統一到桌面/Web?

結合這些維度,大致落點會是:

  • React 團隊 + 主流業務 App + iOS/Android 為主:React Native 新架構 + 0.85 之後的版本,是一個平衡點不錯的選擇。

  • 需要高度一致的跨端 UI、長遠明確要上桌面/Web:Flutter 更合適。

  • 業務簡單、Web 資產極多、體驗要求一般:Ionic/WebView 方案性價比高。

  • 安全/合規/極致效能:原生是主路,跨端方案只能作為補充或外圍。

分享