整理 | 蘇宓
兜兜轉轉,不少開發者還是發現 React Native 的真相定律。
日前,國外知名聊天軟體 Discord 於官方部落格上發佈了一則《Android 版本 Discord 激動人心的更新》公告。在公告中,Discord 指出,其將在未來幾周內改進 Android 版本的應用程序,具體包括通過跨 Android、iOS 和桌面端的集中式簡化應用開發流程,實現跨平臺的功能一致性。

圖源:Discord 官網

iOS、桌面端、Android 步調不一,苦不堪言的跨平臺開發
一直以來,我們在使用軟體時經常會發現不同平臺上,相同的應用程序更新步伐都不太一致,往往都是 iOS 端和桌面端先行發佈之後,Android 平臺上的應用程序才姍姍來遲。這種現象也同樣出現在了 Discord 上。
如今,Discord 決定改變這種現狀,其表示正在使用 React Native 來進行 Android 應用開發,這意味著在 Discord 的每個平臺上都能以更快速度改進體驗,同時仍然在 UI 中保留 Android 和 iOS 特定的模式。

Discord Android 版使用 React Native 開發
作為一款跨平臺框架,React Native 是由 Facebook (現更名為 Meta)軟體工程師 Jordan Walke 在 2013 年發起了的一個駭客馬拉松項目,彼時他發現了一種為 iOS 應用程序生成 UI 元件的方法。因此,React 開源框架最初是為 iOS 構建的,並於 2015 年 3 月作為開源項目在 GitHub(https://github.com/facebook/react-native)上可供公眾使用。隨後,Facebook 也迅速為 React Native 提供了 Android 支持。
截至目前,React Native 已經成為 GitHub 中最大的項目之一,擁有 104k Star 和 22.3k 分支。它也被廣泛用於許多流行的移動應用程序,包括Instagram、Microsoft Outlook、Shopify、Tesla、Pinterest 等等。
Discord 自 2015 年以來一直在其 iOS 應用程序中使用 React Native。如今在將 Android 應用程序開發遷移到 React Native 框架下, Discord 表示,「Android 使用者還將享受更快的應用程序更新發布週期的好處。React Native 允許我們簡化和整合流程,有助於工程師更高效地工作,更頻繁地推送更新,特別是現在團隊不會花太多時間為不同的設備維護不同的程式碼庫。」

React Native 是跨平臺神器?
針對 Discord 的遷移,不少網友也發起了對 React Native 的使用的討論。
@ramesh31:
React Native 確實是移動開發的遊戲規則改變者。去年,我用它來構建一個新的 iOS 應用程序,這是自舊的 Objective-C / UI-Kit 時代以來的第一次。實際上,我在幾分鐘內構建了一些東西,這在當時需要花費數小時或數天的時間編寫自定義 OpenGL 和網路程式碼。在這一點上,任何性能權衡都是值得的。
不過,由於性能、迭代速度、複雜度等維度的重重挑戰,曾經也有不少公司如 Airbnb、Udacity 在使用一段時間的 React Native 之後選擇了放棄,重新擁抱原生開發。對此,也有網友@Grim-444 根據自己公司的實踐分享道:
「我非常確信 React Native 只帶來一件真正的改變,那就是它為 PM/經理提供了一些很好的宣傳材料,告訴他們如何領導團隊「切換到共享的跨平臺程式碼庫」。然後,他們在使用 React Native 做遷移工作時,進而需要一直處理遷移到 RN 的長期後果。
以我們公司為例,近日,技術團隊將 Android、iOS 應用程序從原生開發轉為 React Native 開發。RN 發起人承諾在平臺之間共享程式碼以及性能會和原生開發一樣好,以及 UI 也會像原生開發一樣獲得各種各樣的好處,然而最終這些都沒有真正的實現。
到了最後,RN 的程式碼只佔了 Android 應用程序的 20%。技術團隊不能實現「編寫一次」,在兩端運行。
原來,我們有兩個團隊:iOS 和 Android 開發團隊。現在,我們有三個團隊,iOS 原生、Android 原生和 React Native 團隊。進而 React Native 團隊內部還被分為 iOS 和 Android 兩大陣營,顯得特別亂。
另外使用 RN 開發還存在一些問題,如:
對於在 RN 中沒有辦法完成的事情,我們還得需要一個配備齊全的 Android 團隊的支持。
在使用 React Native 開發時,與原生開發的應用程序性能差異非常明顯。
現在我們組織也有問題,因為應用程序涉及多個團隊/語言,應用程序的不同部分由不同的團隊和管理層擁有,而不是只有一個團隊來開發一款好的應用程序。
我們團隊的不少工程師都不想與 RN 有任何關係。
我們的程式碼庫現在依賴於第三方平臺和完全不同於 Google 所說的應該構建 Android 應用程序的語言。為什麼我們不按照 Android 團隊所說的方式構建 Android 應用程序呢?是否真的有必要長期支持 RN/JS?」
為此,你怎麼看?是否使用過 React Native?
參考:
https://news.ycombinator.com/item?id=32310392
https://discord.com/blog/android-react-native-framework-update