終端機畫面顯示 Expo SDK 56 升級指令與 New Architecture 配置

Expo SDK 56 + New Architecture 升級實戰:Fabric / TurboModules / Hermes V1 七步無痛遷移

自由揚AntonyLin
終端機畫面顯示 Expo SDK 56 升級指令與 New Architecture 配置
終端機畫面顯示 Expo SDK 56 升級指令與 New Architecture 配置

83%。 這是截至 2026 年 1 月,所有用 EAS Build 出貨的 Expo SDK 54 專案啟用 New Architecture 的比例。換句話說,剩下 17% 還在用 legacy bridge——而從 SDK 55 開始,這 17% 已經沒有後退鍵了。

Expo SDK 55 把 newArchEnabled: false 這個 escape hatch 整個拿掉,SDK 56(2026 年 6 月剛釋出)更進一步重寫了 iOS 原生模組的 Objective-C++ 中介層,全部改走 Swift / C++ interop。意思是:你如果還在 Expo SDK 53 以下 / React Native 0.74 以下,升級的問題已經從『要不要做』變成『什麼時候做、怎麼做才不爆』——這是工程取捨題,已經不是決策題。

這篇是我們整理出來的 7 步無痛遷移 SOP,從 Hermes V1 切換、Fabric 啟用、TurboModules 自動轉換到實測效能改善,附對應指令、踩坑清單與量測數字。最後一段是『我們的取捨』——如果你是 tech lead,這段是你要拿去跟工程團隊對齊的對話材料。

升級拖了一年的 5 個真實理由

我們訪談過幾位實際在維護 RN production app 的工程師(以及自己內部討論過),歸納出『遲遲不升 New Arch』的真實原因——沒有一個是技術不夠強,全部是工程取捨。

  1. 『升級沒有立即業務價值』:performance gain 是漸進的,產品經理看不到立即 KPI,排序永遠在 feature 後面。
  2. 『怕第三方套件還沒準備好』:擔心 react-native-svg / lottie / reanimated 等熱門套件還沒升 New Arch 對應版本。
  3. 『升完要重測 QA』:怕業務驗收 + QA regression 要 2-4 週。
  4. 『沒人 own 這條 migration』:工程團隊沒人專責跟著 React Native release,新版本永遠是『下個 sprint 再說』。
  5. 『以前升過 Hermes 翻車過』:SDK 48 或 49 時代某些套件對 Hermes 不穩定的記憶還在。

這五個理由都合理。但 2026 年 6 月的現實是:上面五件事的『風險』已經比 2024 年低 5-10 倍。 第三方套件的 New Arch 相容性截至 SDK 56 已經接近 100%;Hermes V1 在 SDK 56 變成預設引擎;EAS Build / Update 把『回滾』變得幾乎免成本——你升完發現有問題,OTA 灰度發布一個指令就能把流量 100% 切回舊版(這部分我們在 EAS Build + EAS Update 上架實戰 講得更細)。

先搞懂三個元件:JSI、Fabric、TurboModules 到底各做什麼

升級之前一定要先理解 New Architecture 把什麼換掉了——不然 debug 的時候你會在錯誤訊息裡看到陌生的字眼還以為是 random bug。

元件

替換掉的舊架構

做什麼

你會在哪裡感受到差異

JSI(JavaScript Interface)

Legacy Bridge

JS 跟原生層用直接 C++ 呼叫,免去 JSON 序列化往返

原生 module 呼叫快 10-100 倍

Fabric

Legacy UI Manager

新 renderer,UI 更新可以同步、可以併發

List 滾動更順、startup 更快

TurboModules

Legacy Native Modules

lazy loading,原生 module 用到才載入

冷啟動時間明顯下降

Hermes V1

JSC(JavaScriptCore)/ 舊 Hermes

JS 引擎,預編譯 bytecode、記憶體更省

App size 更小、首次開啟更快

Codegen

手寫 native module interface

Spec → 自動產生 native binding

套件升級不用手寫膠水程式

重點是這幾個元件是『一組』而不是『可以挑著用』。從 React Native 0.76 / Expo SDK 52 開始,打開 New Architecture 就是打開全部 5 個——你不能只啟用 Fabric 不啟用 TurboModules。這是 New Arch 的設計取向。

Hermes V1 跟前一代 Hermes 差在哪

Hermes 從一開始(2019 年)就是 Meta 為 React Native 寫的輕量 JS 引擎,目標是『開機快、佔記憶體少』。Hermes V1 是 2026 年初的新版本,主要差異在:

  • Static Hermes:實驗性的 AOT 編譯模式,把 TypeScript 直接編成 native binary,性能跟 native 接近(目前還是 opt-in,但未來會變預設)。
  • 更穩的 GC:garbage collector 換新演算法,記憶體峰值平均降 15-20%。
  • 更好的 source map:生產環境 crash 報告 stack trace 更精準,debug 不再卡在 minified function name。

出處:Hermes V1 release notes(Meta 官方)React Native New Architecture 文件

七步無痛升級 SOP(含對應指令)

下面 7 步是我們建議的順序,前 3 步是『準備』,後 4 步是『執行』。整個流程在小專案(10 萬行 JS 以下)大約 4-8 小時,大專案可能 2-3 天。

Step 1:盤點目前所有第三方 native 套件

Bash
# 列出所有 react-native 開頭的 dependencies
cat package.json | grep -E '"react-native|expo-' | sort

拿到清單後,去 Directory of React Native libraries(社群官方索引) 一個一個查 New Arch 相容性。每個套件頁面右側會標 New Architecture: Supported / Untested / Unsupported

Unsupported 的套件就是你升級的 blocker。 處理方式:1) 找替代套件、2) 升到該套件的最新版(多半已經支援)、3) 自己 fork patch(最後選項)。

Step 2:升 Expo SDK 到目標版本

Bash
# 升到 SDK 56(New Arch 預設)
npx expo install expo@^56.0.0
npx expo install --fix

--fix 旗標會把所有 expo 相關套件升到跟新 SDK 相容的版本,是 SDK migration 的核心指令。建議跑完之後 commit 一版,方便對照 diff。

Step 3:開 New Architecture 開關

JSON
// app.json
{
  "expo": {
    "newArchEnabled": true,
    "jsEngine": "hermes"
  }
}

SDK 55+ 預設已經是 newArchEnabled: true,可以不寫;但寫出來明確一點,未來工程師看到不用懷疑。jsEngine 預設是 hermes,可以省略,但絕對不要切回 jsc——SDK 56 已經停止支援 JSC。

Step 4:跑一次完整 build,確認沒有 build-time error

Bash
# Android
npx eas build --platform android --profile development

# iOS
npx eas build --platform ios --profile development

這一步通常會抓出『某個第三方套件沒有 New Arch binding』類型的 build error。錯誤訊息會明確指到套件名稱,照 Step 1 的 plan 處理。

Step 5:跑完整 QA / 自動化測試

New Arch 的問題 90% 出在 runtime 行為差異,build error 只佔少數。 常見的有:1) UI 更新時序不同(同步 vs 異步 render)、2) 某些動畫 lib 在 Fabric 下行為改變、3) 自訂 native module 的 thread safety 假設失效。

我們的做法是:把這個 build 當『QA 階段』放到 internal distribution,讓 PM 跟 QA 工程師完整跑一遍 critical path(登入、付款、推播、deep link、最常用的 5 個 feature)。

Step 6:跑效能 benchmark

升級的價值要量化,不然下次升 SDK 還是會被擋。我們建議至少量測:

  • 冷啟動時間(cold start):從 launch 到首屏 interactive 的時間,用 Xcode Instruments / Android Studio Profiler。
  • List 滾動 FPS:主要長 list 滾動時的 FPS,目標 60。
  • Bundle size:AAB / IPA 體積對比升級前後。
  • Memory peak:熱門路徑的記憶體峰值。

根據 Expo SDK 56 changelog 官方數據,Android 冷啟動快 40%、iOS build time 快 50%+。實際數字會因 app 而異,但量級差不多。

Step 7:用 EAS Update staged rollout 上 production

升級完的 JS bundle 用 EAS Update 灰度發布——5% → 25% → 50% → 100%,每個階段觀察 24-48 小時的 crash rate(用 SentryBugsnag 之類監控工具)。任何階段 crash rate 比舊版本高超過 20%,立刻把 channel 回切舊 branch。

詳細流程在 EAS Build + EAS Update 上架實戰

自己升 vs 外包升:兩條路的真實成本對比

前面 7 步聽起來不難,但實作上常常卡在『沒人 own』。如果你是中小企業老闆或產品負責人,問題會回到一個簡單的選擇:要工程團隊自己排優先序升、還是找外部團隊集中升完交回。

維度

自己升

外包升

時間成本

工程師 4-12 個工作天,但會被插斷

外部團隊 2-5 個工作天集中做完

風險

工程師沒做過 = 邊學邊撞

外部團隊做過多次 = 知道地雷在哪

知識留存

團隊學會了,下次升較快

外包做完,下次又得重新學或再外包

停機 / Regression 風險

高(QA 通常被壓縮)

中(外包合約應明確包含 QA + 灰度 rollout)

費用

薪資內含,但機會成本高

一次性費用 NT$ 30k-150k(依規模)

最適合

有資深 RN 工程師、有時間排

業務 deadline 緊、缺資深 RN 經驗

我們的觀察是:『升完之後沒人懂』是外包最常見的隱性成本。 所以如果走外包路線,合約一定要包含『升完之後 1 場 2-4 小時的 walkthrough』,讓內部工程師知道每一個變動點,下次自己升就有方向。

ℹ️我們做過這件事

順帶說一下,我們公司本身就是『會寫程式的接案公司』,30+ 企業客製案落地的過程裡,跨平台技術升級這類事情每年都會遇到——React 從 17 升 18、Node 從 16 升 20、TypeScript 從 4 升 5 都做過。雖然 RN 端不是我們主力,但同一條工程思路(盤點依賴 → 灰度發布 → 量化 ROI)我們在 Web 端跑了無數次。看到這裡,如果你的工程團隊卡在『不知道怎麼安排這次升級』,我們很樂意 聽你聊聊現況,幫你看哪一塊風險最大、值不值得外包。

升級前 vs 升級後的可量化差異(SDK 53 → SDK 56)

下面這些數字來自 Expo 官方 changelog 與 Expo SDK 56 升級指南,再加上我們對照幾位 RN 社群工程師的實測——並非每個 app 都會看到完全一樣的數字,但量級會非常接近。

指標

SDK 53(Legacy Arch)

SDK 56(New Arch + Hermes V1)

改善幅度

Android 冷啟動

1.8 - 2.5 秒

1.0 - 1.5 秒

約 40%

iOS build time(EAS)

8-12 分鐘

4-6 分鐘

約 50%

IPA 體積(含 Hermes)

~ 32 MB

~ 27 MB

約 15%

JS bundle 載入

1.2 - 1.6 秒

0.7 - 1.0 秒

約 35%

記憶體峰值(重 list)

+0%

-15 ~ -20%

明顯改善

Native module 呼叫

需經 bridge

JSI 直接呼叫

10-100x(不同 module 差異大)

可量化的不只是效能。還有一塊隱性收益是『不再被舊架構卡開發效率』——你會驚訝有多少『RN 怪 bug』其實是 legacy bridge 的時序問題,升完之後它們會默默消失。

ℹ️我們怎麼看

Fabric / TurboModules / JSI 這套架構從 2018 年 Meta 在 React Native EU 第一次預告,到 2026 年才完全強制——花了 8 年。這 8 年帶給 React Native 最深層的改變超越性能數字本身——它讓 React Native 終於變成跟原生平台『同一層級』的工具。3 年後我們的看法是:React Native + Expo 會跟原生 SwiftUI / Jetpack Compose 共存,三者之間的『誰勝出』會比現在無聊很多——因為它們的差距已經小到『工程團隊熟悉哪一個』比『哪一個技術強』還重要。對中小企業老闆而言這是好消息:找熟 React Native 的工程師,比找熟 iOS / Android 雙原生的便宜 30-50%,產出速度卻幾乎一樣。

💡Expo SDK 升級檢核 checklist 下載

我們正在整理一份『Expo SDK 跨版升級檢核表(含 New Arch 相容性盤點欄、Benchmark 量測欄、灰度發布 timeline 範本)』,可以在 我們的部落格資源頁 找最新版(資產製作中,目前可先用本篇內文逐步檢查)。

Q如果我的 app 用了一個還沒支援 New Arch 的套件怎麼辦?

三個處理順序:1) 看該套件 GitHub 是否有 PR / branch 已經在做 New Arch 適配,常見熱門套件多半有;2) 找功能類似的替代套件(reactnative.directory 可以查);3) Fork 套件自己 patch,這是最後手段。我們建議至少升前一週做這個盤點,不要等到 build 失敗才查。

QReact Native 0.76+ 才有 New Arch,但我們在 Expo SDK 52,能升嗎?

可以。Expo SDK 52 就已經把 New Arch 設為預設啟用,背後是 React Native 0.76。不過我們建議直接跳到最新的 SDK 56(搭配 RN 0.85+),因為 SDK 53-55 之間還有不少 New Arch 早期 bug fix,SDK 56 是目前最穩的版本。

Q升到 SDK 56 之後,舊用戶不更新 app 還能跑嗎?

可以。OS 端只認 binary,不管你內部用哪個 SDK。但有兩個 gotcha:1) 你新 build 出來的 JS bundle 用 EAS Update 推給舊 binary 會失敗,因為 native runtime 版本對不上;2) 所以 SDK 升級必須跟 binary 升級綁在一起(不能只 OTA 不重 build)。

QHermes V1 跟 Static Hermes 是同一個東西嗎?

不是。Hermes V1 是 2026 年新版 Hermes 的 stable channel,預設啟用;Static Hermes 是更前沿的 AOT 編譯實驗版本,目前還在 opt-in 階段。除非你已經是 RN 重度玩家,先穩用 Hermes V1 就好。

Q我們有 3 個第三方套件升級後跑不動,要花 5 個工作天 patch,老闆不批時間怎麼辦?

把升級價值量化拿給老闆:1) 冷啟動 -40% = 用戶留存提升的試算(產業基準大約是冷啟動每快 100ms,conversion +1%);2) iOS build time -50% = 工程團隊每月省下的 build 等待時間 × 時薪;3) crash rate 通常會下降 10-30%。三個數字加起來通常 5 個工作天的成本可以打平。

Q升到 SDK 56 之後,還可以降回 SDK 55 嗎?

技術上可以(git revert),但實務上不建議。原因是 1) Hermes V1 預設 + New Arch 強制這兩個變更會牽動許多套件版本,回降會有 dependency hell;2) EAS Update 一旦推到 production binary,回滾要重新 build。比較好的做法是:升完之後立刻做完整 QA + staged rollout,發現問題就在 rollout 中段攔截。

如果這次升級你不想自己一個人扛

Expo SDK 跨版升級是少數『做對了沒人會稱讚,做錯了會被質疑為什麼壞掉』的工程事——但它對 app 體質的影響其實很大。如果你的團隊缺一個有經驗的人帶一次完整 migration、或者想評估『要自己升還是外包』,我們很樂意 聽你聊聊現況。我們會直接告訴你『這個值得做嗎、自己做大概要多久、外包大概多少預算』,這個階段我們陪你一起想,後面真的要動手再談範圍跟費用。

如果你還在更前一步——還沒決定要不要用 Expo,可以先看 Expo Go 撞牆了怎麼辦?4 個訊號告訴你該轉 Development BuildEAS Build + EAS Update 上架實戰,三篇一起讀比較有完整圖像。

分享文章

AUTHOR

自由揚AntonyLin

留言(0)

尚無留言,成為第一個留言的人吧!

需要網站系統架設或軟體開發?

無論是品牌官網、客製化系統還是應用程式,我們的團隊擁有豐富經驗,歡迎聯繫我們,讓專業為您的事業加分。