Instagram 使用 React Native 的情況

本文翻譯自 Instagram Engineering 發(fā)布的 React Native at Instagram


React Native 自從 2015 年開源以來剑肯,已經(jīng)走過了漫漫長路职抡。僅僅兩年后揪惦,它已經(jīng)不僅被用于 Facebook 和 Facebook Ads Manager陈哑, 還用于很多其他公司,從財富 500 強公司到熱門的創(chuàng)業(yè)公司 仗哨。

開發(fā)速度定義了 Instagram 移動端的價值的一方面桥言。2016年初,我們開始探索使用 React Native谋国,使產(chǎn)品團隊通過代碼重用快速迭代 更快地發(fā)布功能槽地,使用 Live Reload 和 Hot Reloading 等工具,省去編譯安裝的時間。

挑戰(zhàn)

將 React Native 集成到現(xiàn)有的 native app 中會帶來額外的工作和挑戰(zhàn)捌蚊,但如果從頭開始寫就不會遇到這個問題集畅。考慮到這一點逢勾,我們決定先移植我們可以想到的最簡單的視圖:推送通知視圖牡整。這個視圖最初被實現(xiàn)為一個 WebView,所以我們覺得在一開始搞定它并不會太難溺拱。最重要的是逃贝,這個視圖不需要我們建立很多導航結構——UI 很簡單,翻譯由后端確定迫摔。

Android 方法計數(shù)

出現(xiàn)的第一個問題是把 React Native 添加為一個依賴沐扳,而不是直接拖入整個庫。否則不僅會增加包的大小句占,而且會對方法計數(shù)產(chǎn)生很大的影響沪摄,導致 Instagram for Android 的所有性能結果都是多指的(Instagram仍然是單指令!)纱烘。我們最終選擇性地只拖入我們當時需要的視圖管理器杨拐,然后自己實現(xiàn)那些不想拖入的依賴庫。最終擂啥,React Native 添加了大約 3500 個方法哄陶。用 React Native 編寫的功能幾乎不需要定義 Java 方法,因此我們相信這種投資在長期內是值得的哺壶。

指標

作為推送通知設置實驗的一部分屋吨,我們審核了 React Native 對多個指標的影響,包括崩潰和內存溢出山宾。我們發(fā)現(xiàn)這些指標在實驗開始時和用戶離開 React Native 功能時都保持中間值(因此下次進入時我們不必重新創(chuàng)建它)至扰。

啟動性能

React Native 有一個啟動開銷,主要是由于必須將 JavaScript 包注入JavaScriptCore(React Native 在 iOS 和 Android 上使用的 VM)并實例化本機模塊和視圖管理器资锰。雖然 React Native 團隊在 提高性能方面 取得了很大進步敢课,但對于 Instagram 的集成,我們希望衡量這種差距台妆,來判斷這種權衡是否真的有意義翎猛。為此,我們將現(xiàn)有的 native Edit Profile 視圖移植到 React Native接剩。我們構建了產(chǎn)品基礎架構,開始被產(chǎn)品團隊并行使用(例如導航萨咳,翻譯懊缺,核心組件)。

我們最終利用了 React Native 團隊已經(jīng)構建的想法和基礎,即Random Access Module Bundling鹃两,Inline Requires遗座,Native Parallel Fetching 以及已經(jīng)集成到框架中的大量內容。

產(chǎn)品

如上一節(jié)所述俊扳,Core Client 團隊將推送通知設置和 Edit Profile 視圖移植到 React Native途蒋。我們還移植了 Photos Of 視圖,查看使用 React Native 加載列表時的性能:

除了這些例子馋记,還有幾個產(chǎn)品團隊發(fā)布了 React Native 的其它功能号坡。

推廣文章

Instagram 有一個輕量級界面,用于宣傳推廣文章梯醒。此產(chǎn)品最初實現(xiàn)為 WebView宽堆,因為該技術允許團隊比 native 代碼更快地迭代。WebView 的問題是茸习,UX 不覺得 native 的啟動非常緩慢畜隶。銷售團隊將此功能移植到 React Native,并在啟動時間和用戶體驗方面取得了極大的改進号胚。值得一提的是籽慢,盡管這是一個非常復雜的創(chuàng)建流程,它只添加了 6 個方法到 Android DEX 中猫胁。

YouTube 視頻:Post Promote

保存

每個月有超過 6 億人來到 Instagram箱亿,聯(lián)系他們的朋友的同時發(fā)現(xiàn)了大量基于興趣的靈感。然而杜漠,他們并不總是想在發(fā)現(xiàn)的時候就立馬做什么极景,而是想在以后再回顧這個內容。為了滿足這個需求驾茴,Save 團隊實現(xiàn)了對 保存帖子 的支持盼樟,想回顧的時候就直接打開一個新的、私人的 tab锈至,出現(xiàn)在個人資料上晨缴,但只對自己可見。

Save 團隊用 React Native實現(xiàn)了 iOS 版本的保存帖子列表峡捡。

驗證碼

驗證碼是從服務器觸發(fā)的流量击碗,以響應可疑操作(例如:當需要驗證電話號碼時,我們就認為您的賬戶已被盜用们拙,等等)稍途。

過去,驗證碼已使用 WebView 實現(xiàn)砚婆。如前所述械拍,WebView 適用于代碼重用和快速迭代速度,但 UX 沒有發(fā)現(xiàn) native 和啟動時間可能很慢。

Protect and Care 團隊開始著手改進其中一些流程坷虑。他們決定使用 React Native 來實現(xiàn)代碼重用甲馋,同時保持良好的用戶體驗和快速啟動時間。

評論審核

我們希望 Instagram 是一個安全的地方迄损,每個人都可以捕捉和分享他們最重要的時刻定躏。隨著 Instagram 社區(qū)的發(fā)展和來自世界各地的人們分享更多的內容,我們希望努力工作以保持 Instagram 的積極和安全芹敌,尤其是您的照片和視頻的評論痊远。考慮到這一目標党窜,F(xiàn)eed 團隊推出了一項功能拗引,允許用戶審核他們在帖子上發(fā)布的評論。

Lead Gen Ads

Lead Gen Ads 是一個界面的稱呼幌衣,允許用戶與廣告客戶共享信息矾削。廣告客戶可以自定義此界面上的表單。

結果

React Native 允許產(chǎn)品團隊更快地將功能發(fā)布到 iOS 和 Android app豁护。下面的列表顯示了一些產(chǎn)品的 app 之間重用代碼百分比哼凯,可用作衡量提高開發(fā)人員的速度:

  • 推廣文章:99%*
  • 短信驗證碼:97%
  • 評論審核:85%
  • Lead Gen Ads:87%
  • 推送通知設置:92%

補充

我們最近將移動端基礎架構開發(fā)團隊( iOS 和 Android )搬到了紐約市。如果這篇博文讓你對我們正在做的事感到興奮楚里,我們正在招聘——請查看我們的 招聘頁面 断部。

Martin BigioDon Yu 班缎, Brian RosenfeldGrace Ku 是 Instagram 紐約 Core Client 團隊的軟件工程師蝴光。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市达址,隨后出現(xiàn)的幾起案子蔑祟,更是在濱河造成了極大的恐慌,老刑警劉巖沉唠,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疆虚,死亡現(xiàn)場離奇詭異,居然都是意外死亡满葛,警方通過查閱死者的電腦和手機径簿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘀韧,“玉大人篇亭,你說我怎么就攤上這事〕” “怎么了暗赶?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵鄙币,是天一觀的道長肃叶。 經(jīng)常有香客問我蹂随,道長,這世上最難降的妖魔是什么因惭? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任岳锁,我火速辦了婚禮,結果婚禮上蹦魔,老公的妹妹穿的比我還像新娘激率。我一直安慰自己,他們只是感情好勿决,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布乒躺。 她就那樣靜靜地躺著,像睡著了一般低缩。 火紅的嫁衣襯著肌膚如雪嘉冒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天咆繁,我揣著相機與錄音讳推,去河邊找鬼。 笑死玩般,一個胖子當著我的面吹牛银觅,可吹牛的內容都是我干的。 我是一名探鬼主播坏为,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼究驴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匀伏?” 一聲冷哼從身側響起洒忧,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帘撰,沒想到半個月后跑慕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡摧找,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年核行,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬耘。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡芝雪,死狀恐怖,靈堂內的尸體忽然破棺而出综苔,到底是詐尸還是另有隱情惩系,我是刑警寧澤位岔,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堡牡,受9級特大地震影響抒抬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜晤柄,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一擦剑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芥颈,春花似錦惠勒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盾计,卻和暖如春售担,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闯估。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工灼舍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涨薪。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓骑素,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刚夺。 傳聞我的和親對象是個殘疾皇子献丑,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內容