跳到主要內容

關於 New Architecture Rollout 的更新

·7 分鐘閱讀時間
Nicola Corti
Nicola Corti
Meta 軟體工程師

大家好,如同先前宣布

2022 年將是 New Architecture 在開源領域大放異彩的一年

如果您還沒有時間研究 New React Native Architecture (Fabric Renderer 和 TurboModule 系統),現在正是時候!

我們想與社群分享一些我們準備的措施和資料,以確保每個人都能參與這項努力。

工作小組

最近,我們在 GitHub 上啟動了 React Native New Architecture 工作小組,這是一個僅供討論的儲存庫,旨在協調和支援 New Architecture 在整個生態系統中的推廣。

我們將這個工作小組設想為一個空間,讓社群可以會面、分享想法,並討論在採用 New Architecture 期間遇到的挑戰。此外,我們將利用這個工作小組與更廣泛的社群分享資訊和更新,以提高透明度。

為了保持討論的重點,我們決定將這個工作小組設定為公開開放閱讀,但限制寫入,僅限獲批准的使用者。

如果您希望加入對話,可以填寫此表單,以申請或提名您認為可以為討論帶來價值的任何人。

歡迎所有人申請加入對話。

如同每個討論區,我們想再次強調尊重和歡迎他人意見的重要性。如果您尚未閱讀我們的行為準則,請務必閱讀。

遷移指南

經過幾輪審查與意見回饋後,我們終於合併了遷移指南 (前稱 Playbook)。您可以在 New Architecture 工作小組的 網站上找到它。

本遷移指南將逐步向您展示如何建立自訂 Fabric 元件或 TurboModule。本指南也將向您展示如何調整現有的應用程式或程式庫以使用 New Architecture。

此外,我們想提醒您我們網站上全新的 架構區塊。您可以在那裡找到幾篇深入的文章和 React Native 內部運作的說明。特別是,Fabric 區塊可以幫助您了解 New Architecture 世界中的渲染管道。

最後,請考慮在工作小組的 討論區 中分享您對此文件資料的意見回饋。我們一直在尋求開發人員的意見,並希望確保我們提供您認為最有用的內容。

在接下來的幾個月中,我們將研究完善和新增更多文件,以進一步協助您。

New Architecture 範本

React Native 0.68.0 即將發佈。此版本的 React Native 標誌著 New Architecture Rollout 的關鍵里程碑,因為它是第一個在新應用程式範本中包含選擇加入開關的版本。

這表示您將能夠透過變更範本中的一行程式碼來試用 New Architecture。我們也在範本中新增了大量的註解和文件,以確保您無需額外閱讀即可立即使用。我們希望這將透過減少您必須編寫的程式碼量來協助您採用 New Architecture。

在接下來的版本中,我們將繼續更新範本,使其更加精簡且易於使用。

若要在任一平台上啟用 New Architecture,您可以

  • 在 iOS 上,在 ios 資料夾內執行 RCT_NEW_ARCH_ENABLED=1 bundle exec pod install
  • 在 Android 上,將 newArchEnabled 屬性設定為 true,方法是以下任一項
    • 變更 android/gradle.properties 檔案內的對應行。
    • 設定環境變數 ORG_GRADLE_PROJECT_newArchEnabled=true
    • 使用 -PnewArchEnabled=true 叫用 Gradle

然後,您可以使用 yarn react-native run-androidrun-ios 執行您的應用程式,您將使用已啟用的 Fabric 和 TurboModules 執行。

請考慮試用這個新範本,並回報您可能遇到的任何錯誤或非預期的行為。在過去幾個月中,我們努力修正錯誤和建置失敗,如果沒有社群持續的意見回饋和測試,這些錯誤和失敗將難以發現

第三方程式庫生態系統

如果沒有 第三方程式庫作者與維護者 的全力支援,社群將無法遷移到 New Architecture。

我們了解這可能是一個繁瑣的過程,並且我們了解在舊版和 New Architecture 上支援使用者的重要性。在接下來的幾個月中,我們將專注於支援我們的程式庫開發人員,以協助他們進行遷移。

如果您是程式庫開發人員我們邀請您在 New Architecture 工作小組中發佈更新,說明您程式庫的狀態。這將有助於您吸引早期採用者,並讓我們了解是否有任何程式庫遇到阻礙。

如果您是程式庫使用者,您可以在此處發佈訊息,要求遷移程式庫。如果我們發現某個程式庫成為許多使用者的阻礙,我們將嘗試聯繫維護者,並了解他們為何尚未遷移。

最後,我們要特別感謝 Software Mansion 發佈了新版本的 react-native-screens,它同時支援兩種架構。此外,他們發佈了一篇部落格文章 (Introducing Fabric to react-native-screens),在其中講述了他們的遷移故事。我們希望您會覺得這個故事具有啟發性,並且對您處理遷移有所幫助。

發佈

0.68 預先發佈版本的工作已實現了我們在 上半年度定義的改進發佈流程 中的大部分內容。

我們很高興分享,在 0.68 版本中,我們能夠

  • 成功地將發佈工作納入內部輪換。這大部分得益於 改進的發佈流程文件,這將降低發佈流程的公車係數。
  • 與合作夥伴啟動了討論,以支援 Copilot 輪換。我們希望這項努力將提高流程的透明度,並告知我們的合作夥伴應在哪裡投資以支援 React Native 發佈和生態系統。
  • 從社群中招募了幾位發佈支援者和測試人員。我們在上半年度發出了尋求協助的呼籲,許多人挺身而出!來自測試人員和支援者的意見回饋幫助我們修正了關鍵錯誤和回歸問題,特別是針對即將發佈版本的新架構。感謝所有報名和測試發佈版本的人員!

在 React Native 0.69 中,我們將繼續完善此流程,理想情況下是讓合作夥伴提供更早的發佈訊號並加入副駕駛員。一如既往,非常歡迎任何意見回饋。如果您想加入成為發佈測試人員或支援者,請在此處註冊

朝向預設 Hermes 引擎

New Architecture Rollout 的關鍵點之一是採用新的 JavaScript 引擎:Hermes。

隨著 New React Native Architecture 的推出,我們將將 Hermes 設定為預設引擎。這表示所有新的文件和範本都將啟用 Hermes。

請注意,我們將繼續與社群合作,以確保其他引擎 (例如 JSC (JavaScript Core)) 受到支援。您仍然可以使用您想要的引擎,但您必須明確停用 Hermes

為了提高 Hermes 的穩定性,我們正努力變更 Hermes 的發佈模型。具體來說,我們預期 Hermes 的發佈流程更接近 React Native 的發佈流程。

這將使我們能夠發佈一個 React Native 版本,其中捆綁了一個完全相容的 JS 引擎。您不必處理執行階段崩潰和 Hermes 不相容問題,這些問題真的難以偵錯和理解。

此外,這將縮短在 Hermes 中收集改進和錯誤修正的週期,這將使我們能夠更快速回應 React Native 使用者的需求。

我們將在未來幾個月內分享更多關於此事的資訊。同時,歡迎隨時加入工作小組關於此事的討論。

如果您尚未試用 Hermes,現在是時候試試看了。並請務必標記您可能遇到的任何問題或阻礙。

至此,總結完畢。

我要感謝 Andrei、Aleksandar、Dmitry、Eli、Luna、Héctor 和 Neil 審閱這篇部落格文章,並為這些努力做出寶貴的貢獻。

並期待閱讀您的遷移故事