React Native發佈重構路線圖

React Native做爲時下最熱門的跨平臺開發方案,在這兩年的移動跨平臺方案中可謂一枝獨秀,在不少的移動產品中均可以看到它們的影子,相比國內的Weex,RN的迭代更加頻繁,性能上也無限的接近原生應用。不過,RN從性能上來講仍是有提高的可能,因此,在今年的6月份,也便是Facebook剛剛發佈了 React Native 0.56後,React工程經理 Sophie Alpert 在其官方博客上宣佈他們將要重構 React Native,使其更輕量,更適應 JavaScript 生態圈的發展。react

React Native宣佈重構

React Native應用現狀

Sophie Alpert 說,在 Facebook 內部,他們比以往任什麼時候候都重視 React Native,它已經被用於 Facebook 許多重要的項目上。包括他們最受歡迎的產品之一 Marketplace,每個月有 8 億人使用。git

React Native 也開始被應用在應用程序的其餘地方,若是讀者上個月觀看了 F8 主題演講,就會發現 Blood Donations、Crisis Response、Privacy Shortcuts 和 Wellness Checks 的全部新功能都是使用 React Native 構建的。github

Facebook 主應用之外的項目也在使用 React Native。新的 Oculus Go VR 頭戴式設備對應的移動應用程序就徹底使用 React Native 構建。web

Sophie Alpert 表示,React Native 的目標歷來都不是替代其餘技術,他們專一於 React Native 自身,努力使之變得更好,但他們但願看到其餘團隊從 React Native 中獲得一些想法或靈感,例如將即時從新加載技術運用到非 JavaScript 代碼中。react-native

React Native採用的架構

React Native 項目的設計初衷是成爲 JavaScript 和原生應用之間的橋樑。React DOM 將 React 的狀態更新變成了命令式、可變的 DOM API 調用,如 document.createElement(attrs) 和.appendChild(),而 React Native 則返回一個單獨的 JSON 消息,它列出了要執行的一些操做,如 [["createView", attrs], ["manageChildren", ...]]。架構

他們將整個系統設計爲永不依賴獲取同步響應,並確保列表中全部的內容均可以徹底序列化爲 JSON,並能夠反序列化回來。app

這樣作是爲了提升靈活性:在這個架構之上,能夠構建像 Chrome 調試器之類的工具,這些工具能夠經過 WebSocket 鏈接異步運行全部的 JavaScript 代碼。框架

在過去的 5 年裏,他們發現最初的設計原則加大了某些特性的開發難度。異步橋接(asynchronous bridge)意味着不能直接將 JavaScript 邏輯與不少原生 API 集成在一塊兒,由於這些原生 API 是同步的。異步

批量橋接(本地調用隊列)意味着 React Native 應用程序調用本地函數會更加困難。並且串行化的橋接意味着沒必要要的複製,由於它不是直接在兩個世界之間共享內存。對於徹底使用 React Native 構建的應用程序,這些限制一般是可承受的。但對於在 React Native 與現有應用程序代碼之間進行復雜集成的應用程序,就很糟糕了。async

所以,Facebook 正在對 React Native 進行大規模重構,讓框架變得更加靈活,並更好地與 JavaScript / 原生混合應用中的原生基礎設施集成。

經過這個項目,他們將應用在過去 5 年中學到的知識,逐步讓架構走向現代化。他們正在重構 React Native 內部,大部分工做都是在底層進行的,現有的 React Native 應用程序幾乎不須要作出更改。爲了使 React Native 更輕量化並能更好地適應現有的原生應用,這次重構主要從三個方面進行。

首先,改變線程模型。UI 更新再也不須要在三個不一樣的線程上執行,能夠在任意線程上同步調用 JavaScript 進行優先更新,同時將低優先級工做推出主線程,以便保持對 UI 的響應。

其次,將異步渲染功能引入 React Native 中,容許執行多個渲染並簡化異步數據處理。

最後,簡化橋接,讓它更快、更輕量。原生和 JavaScript 之間的直接調用效率更高,而且能夠更輕鬆地構建調試工具,如跨語言堆棧跟蹤。

完成以上工做以後,就有可能帶來更緊密的集成。如今,若是不經過複雜 hack 的手段就沒法讓原生導航和手勢處理或原生組件(如 UICollectionView 和 RecyclerView)一塊兒工做。在對線程模型作出更改以後,就能夠直接構建這樣的功能。

React Native重構線路

重構的細節

最近,Facebook官方公佈了一些RN項目重構上的細節,主要會從如下一些方面來推進項目的進行。

  1. 讓 RN 的 GitHub 存貯庫更健康,issues 和 pull 請求將及時獲得處理;
  • 提升測試覆蓋率

  • 從 Facebook 代碼存儲庫同步的 Commits 不能違背開源測試的準則

  • 提高社區的貢獻量

  1. 穩定 API,使之更容易與開源依賴項交互;
  • Facebook 使用與開源相同的公共 API

  • React Native 將遵循語義版本標準

  1. 讓生態系統更加有活力,社區將提供高質量的 ViewManagers、native modules、多平臺支持;

  2. 文檔優化,專一於幫助用戶建立高質量的體驗,以及最新的 API 參考文檔。

RN 團隊的目標是經過刪除非核心和無用的組件來簡化 RN,將非核心組件轉移到社區,讓開發者使用更加便捷,他們目前已經決定將這些組件的全部權爲社區所擁有:github.com/react-nativ…

例如,WebView就是其中的一個實例: WebView組件剝離

同時,爲了更好的服務React Native,React Native官方將從如下幾個方面進行優化。

開源內部開發工具

因爲 Facebook 內部開發人員用的是內部開發工具,開發體驗與開源的徹底不一樣,在開源社區受歡迎的那些工具可能並無被 Facebook 開發人員使用,在某些狀況下,Facebook 團隊已經習慣使用僅限 Facebook 內部使用的工具,這種內外差別可能會很大程度影響他們接下來的重構工做。

爲此,他們作了以下改進:

  • 開源 JSI,使社區可以使用本身的 JavaScript VMs,從 RN 的初始版本中替換現有的 JavaScriptCore,有關 JSI 的信息,他們將來會公佈,如今你能夠先經過 React Conf 大會上的演講視頻瞭解:www.youtube.com/watch?v=Ucq…

  • 支持 Android 上的 64 位庫;

  • 新架構下支持調試;

  • 改進對 CocoaPods、Gradle、Maven 和新 Xcode 構建系統的支持。

改善測試基礎設施

當 Facebook 工程師發佈代碼時,若是經過全部測試,則認爲代碼能夠上線了,這些測試能夠判斷某些改動是否會破壞 React Native,因爲 Facebook 使用 React Native 的方式與外部存在差別,他們可能在不知不覺中破壞了開源環境中的 React Native。

爲此,Facebook 將支持內部測試,確保它們在儘量接近開源的環境中運行。這將有助於防止被破壞的代碼開源。同時,他們還將致力於建設測試基礎設施,以便在 GitHub 上更好地測試核心存儲庫,使將來的 pull 請求可以包含在測試裏。

公共 API

Facebook 將經過公共 API 使用 React Native,和開源同樣,以減小無心間的破壞性更改,他們的目標是融合穩定的公共 API,並在 v1.0 中採用語義版本控制標準。

反饋交流

React Native 是 GitHub 上貢獻者數量最多的開源項目之一(排名第二),將來,Facebook 將繼續致力於貢獻者相關的舉措,例如提升透明度和公開討論。對新手來講,文檔將是一個大問題,爲此,RN 將建立自動生成的 API 參考文檔,改善用戶體驗。

RN 團隊稱,這些項目將在明年完成,其中,JSI 項目已經在進行中,其餘的一些改進如簡化 RN,還須要更多的時間去完成,開發者有任何問題能夠在提案中討論,如下是連接地址

注,本文來自於《React Native官網》。若是你對RN有興趣,或者還停留在觀望和入門的邊緣,能夠看一些我以前的書《React Native移動開發實戰》,若是有任何技術問題,也能夠進羣交流:515980159。

相關文章
相關標籤/搜索