React Native 已死?

最近的技術圈尤為熱鬧,Google 發佈了首個 Flutter 預覽版、Vue.js 在 GitHub 上的 star 數量超過了 React.js,而如今全球著名的民宿預訂平臺 Airbnb 突然宣佈要棄 React Native 坑而逃,迴歸原生技術開發,不得不說,這一舉措著實讓 React Native 備受打擊,也讓很多趟過坑的同學們感同身受。

React Native 已死?

20 日晚,Airbnb 在 Medium 上發博文宣佈,“由於許多技術上和組織上的問題,我們決定放棄 React Native,將所有精力投入到原生應用上。”

Airbnb 的心路歷程

與此同時,Airbnb 團隊以 5 篇博文表達了對 React Native 從入門到放棄的心路歷程:

Part 1:React Native at Airbnb(https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c)

  • 經過不斷地評估新技術,最終於 2016 年初遇了 React Native 的美好,更多的工程師可以利用其跨平臺的特性進行快速地開發、還能保持原生的質量、以及只需為 App 進行一次編碼、同時提高了開發者的體驗,基於以上的種種優點,促使 Airbnb 團隊開始基於 React Native 大刀闊斧地佈局。

Part 2:React Native at Airbnb: The Technology(https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838)

  • 詳解了 React Native 作為一項技術的工作原理和優缺點。其在跨平臺、統一設計語言系統(DLS)、React、迭代速度、基礎架構、性能、Redux 等方面都有良好的優勢,但 React Native 彼時仍不成熟、JavaScript 工具缺少安全性類型難以擴展、重構易出錯。

Part 3:Building a Cross-Platform Mobile Team(https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88)

  • 剖析了 React Native 對團隊的一些複雜的挑戰。

Part 4:Making a Decision on React Native(https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a)

  • React Native 如今已經難以滿足 Airbnb 的快速開發、產品質量,以及雖說 React Native 功能代碼幾乎均可跨平臺共享,但 Airbnb 的 App 中只有一小部分是基於 React Native,所以需要大量橋接基礎架構,因此 Airbnb 宣佈即將放棄 React Native 的使用。

Part 5:What’s Next for Mobile(https://medium.com/airbnb-engineering/whats-next-for-mobile-at-airbnb-5e71618576ab)

  • 從 React Native 開發中吸取經驗,迴歸基於原生技術的自有框架開發將會更好。

最終得出結論,他們決定在今年年底全面放棄 React Native。

這條消息來得很突然,因為 Airbnb 一直在為 React Native 貢獻開源項目和工作流工具,就在上個月還在 React Europe 大會上發佈了 Lona 工具,但沒過多久就有了上文所述的話題……

React Native 從入門到放棄

Airbnb 是硅谷創業公司中最早使用 React Native 的公司之一,他們從 2016 年就開始使用,而彼時距離 2015 年 React Native 發佈才僅僅過去了一年。那時,Airbnb 有原生的 iOS 和 Android 應用,在 Web 上則使用 React。由於有著豐富的 React 經驗,他們決定採用 React Native 來加速原生應用的開發。這次移植造成的影響就是帶來了大量的額外工作,而這個影響剛開始時並不明顯。他們花費了大量時間去研究如何編寫輔助功能(如原生橋樑、封裝代碼等)以便讓 JavaScript 支持已有的原生功能。同時,每當 iOS、Android 或 React Native 升級時,這些庫都要進行維護。這不僅是技術上的難題,也造成了毫無必要的組織問題。

由於最初的意圖是“作為公司整體快速前進”,因此出於諸多原因(上文 Part 2 中所述),使用 React Native 已不再是個可行的策略。

但這是否意味著其他人也要拒絕 React Native?我看未必。Airbnb 的博文中提到的許多問題我們都遇到過。但對於 Airbnb 的規模(作為比較,筆者公司 In The Pocket 的移動應用一共有 100 名開發者,一個產品團隊通常包含 4~10 名開發者)以及他們在產品和用戶體驗需求方面的投入的力量來說,他們的確有理由放棄 React Native。不管是什麼工具,都要知道,甚至預料到它的侷限性。

“混合應用很難。”

儘管 React Native 是個 JavaScript 框架,但絕大多數 React Native 至少會兩種平臺(Android、iOS、React Native)。筆者使用 React Native 大約有一年半的經驗。我們認識到,理解常見的原生開發模式(如導航等)非常有必要,而且某些時候不得不在代碼中加入一些原生的東西。沒錯,這會帶來不必要的複雜性,但最終,我們仍然希望儘量使用 JavaScript,儘管其實底層是原生的。

“我們不得不支持三個平臺(以前是兩個),這讓我們感到很疲憊……”

Airbnb 有 220 個 React Native 的界面,但每個平臺上還有 880 個原生界面面,這就是說只有 20% 的功能是 React Native 的。“我們遇到的大多數問題都是由混合模式造成的“。我們在將 React 與原生代碼結合的過程中也認識到了這一點。但是,這些困難不應該成為選擇 React Native 平臺的阻力。

“許多功能都要求把各種技術結合到一起,此時迭代速度、代碼質量和開發者經驗都符合甚至超過了我們的目標值和期望。許多時候我們感覺我們站在了移動開發變革的最前沿。”

即使 Airbnb 已經決定要在移動產品中放棄 React Native,這也不應該對 React Native 的未來造成負面影響。Airbnb 的主要開源項目(Lottie、react-native-maps)已成為開發者日常生活的一部分,現在它們都被轉交給了 React Native 社區。讀完所有五篇博文之後我們可以認為,考慮到可維護性和可持續性,React Native 並不適合像 Airbnb 這種規模的應用。最終,他們證明了 React Native 是個極其強大的框架,能處理超大型應用。但任何工具都會有侷限性。

但目前 React Native 社區仍然很活躍,Facebook 也剛剛宣佈了他們在進行大規模的架構改動,讓框架更靈活,並且與原生架構結合得更好,而 Expo 等公司也做出了許多突破性的庫,如 react-native-gesture-handler 等。

所以說,雖然 Airbnb 棄用了 React Native,但整體而言,React Native 還活著。

原文:https://inthepocket.com/blog/2018/react-native-is-dead-long-live-react-native

譯者:彎月

審校:屠敏


分享到:


相關文章: