React Native發布重構路線圖
React Native作為時下最熱門的跨平臺開發方案,在這兩年的移動跨平臺方案中可謂一枝獨秀,在很多的移動產品中都可以看到它們的影子,相比國內的Weex,RN的迭代更加頻繁,性能上也無限的接近原生應用。不過,RN從性能上來說還是有提升的可能,所以,在今年的6月份,也即是Facebook剛剛發布了 React Native 0.56后,React工程經理 Sophie Alpert 在其官方博客上宣布他們將要重構 React Native,使其更輕量,更適應 JavaScript 生態圈的發展。
React Native宣布重構
React Native應用現狀
Sophie Alpert 說,在 Facebook 內部,他們比以往任何時候都重視 React Native,它已經被用于 Facebook 許多重要的項目上。包括他們最受歡迎的產品之一 Marketplace,每月有 8 億人使用。
React Native 也開始被應用在應用程序的其他地方,如果讀者上個月觀看了 F8 主題演講,就會發現 Blood Donations、Crisis Response、Privacy Shortcuts 和 Wellness Checks 的所有新功能都是使用 React Native 構建的。
Facebook 主應用以外的項目也在使用 React Native。新的 Oculus Go VR 頭戴式設備對應的移動應用程序就完全使用 React Native 構建。
Sophie Alpert 表示,React Native 的目標從來都不是替代其他技術,他們專注于 React Native 自身,努力使之變得更好,但他們希望看到其他團隊從 React Native 中得到一些想法或靈感,例如將即時重新加載技術運用到非 JavaScript 代碼中。
React Native采用的架構
React Native 項目的設計初衷是成為 JavaScript 和原生應用之間的橋梁。React DOM 將 React 的狀態更新變成了命令式、可變的 DOM API 調用,如 document.createElement(attrs) 和.appendChild(),而 React Native 則返回一個單獨的 JSON 消息,它列出了要執行的一些操作,如 [["createView", attrs], ["manageChildren", ...]]。
他們將整個系統設計為永不依賴獲取同步響應,并確保列表中所有的內容都可以完全序列化為 JSON,并可以反序列化回來。
這樣做是為了提高靈活性:在這個架構之上,可以構建像 Chrome 調試器之類的工具,這些工具可以通過 WebSocket 連接異步運行所有的 JavaScript 代碼。
在過去的 5 年里,他們發現最初的設計原則加大了某些特性的開發難度。異步橋接(asynchronous bridge)意味著不能直接將 JavaScript 邏輯與很多原生 API 集成在一起,因為這些原生 API 是同步的。
批量橋接(本地調用隊列)意味著 React Native 應用程序調用本地函數會更加困難。而且串行化的橋接意味著不必要的復制,因為它不是直接在兩個世界之間共享內存。對于完全使用 React Native 構建的應用程序,這些限制通常是可承受的。但對于在 React Native 與現有應用程序代碼之間進行復雜集成的應用程序,就很糟糕了。
因此,Facebook 正在對 React Native 進行大規模重構,讓框架變得更加靈活,并更好地與 JavaScript / 原生混合應用中的原生基礎設施集成。
通過這個項目,他們將應用在過去 5 年中學到的知識,逐步讓架構走向現代化。他們正在重構 React Native 內部,大部分工作都是在底層進行的,現有的 React Native 應用程序幾乎不需要做出更改。為了使 React Native 更輕量化并能更好地適應現有的原生應用,此次重構主要從三個方面進行。
首先,改變線程模型。UI 更新不再需要在三個不同的線程上執行,可以在任意線程上同步調用 JavaScript 進行優先更新,同時將低優先級工作推出主線程,以便保持對 UI 的響應。
其次,將異步渲染功能引入 React Native 中,允許執行多個渲染并簡化異步數據處理。
最后,簡化橋接,讓它更快、更輕量。原生和 JavaScript 之間的直接調用效率更高,并且可以更輕松地構建調試工具,如跨語言堆棧跟蹤。
完成以上工作之后,就有可能帶來更緊密的集成。現在,如果不通過復雜 hack 的手段就無法讓原生導航和手勢處理或原生組件(如 UICollectionView 和 RecyclerView)一起工作。在對線程模型做出更改之后,就可以直接構建這樣的功能。
React Native重構線路
重構的細節
最近,Facebook官方公布了一些RN項目重構上的細節,主要會從以下一些方面來推動項目的進行。
讓 RN 的 GitHub 存貯庫更健康,issues 和 pull 請求將及時得到處理;
提高測試覆蓋率
從 Facebook 代碼存儲庫同步的 Commits 不能違背開源測試的準則
提升社區的貢獻量
穩定 API,使之更容易與開源依賴項交互;
Facebook 使用與開源相同的公共 API
React Native 將遵循語義版本標準
讓生態系統更加有活力,社區將提供高質量的 ViewManagers、native modules、多平臺支持;
文檔優化,專注于幫助用戶創建高質量的體驗,以及最新的 API 參考文檔。
RN 團隊的目標是通過刪除非核心和無用的組件來簡化 RN,將非核心組件轉移到社區,讓開發者使用更加便捷,他們目前已經決定將這些組件的所有權為社區所擁有:https://github.com/react-native-community/discussions-and-proposals/issues/6
例如,WebView就是其中的一個實例:?WebView組件剝離
同時,為了更好的服務React Native,React Native官方將從以下幾個方面進行優化。
開源內部開發工具
由于 Facebook 內部開發人員用的是內部開發工具,開發體驗與開源的完全不同,在開源社區受歡迎的那些工具可能并沒有被 Facebook 開發人員使用,在某些情況下,Facebook 團隊已經習慣使用僅限 Facebook 內部使用的工具,這種內外差異可能會很大程度影響他們接下來的重構工作。
為此,他們做了如下改進:
開源 JSI,使社區能夠使用自己的 JavaScript VMs,從 RN 的初始版本中替換現有的 JavaScriptCore,有關 JSI 的信息,他們未來會公布,現在你可以先通過 React Conf 大會上的演講視頻了解:https://www.youtube.com/watch?v=UcqRXTriUVI
支持 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。
本文轉載自異步社區
React API
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。