原文鏈接: http://arc.applause.com/2015/09/15/facebook-react-native-universal-app-platform/
原文發(fā)表時間: 2015年9月15日
真的可以么?一個代碼庫就能搞定一切?
一次編寫,到處運行。自從個人計算及多平臺技術(shù)出現(xiàn)以來,這句話就變成了無數(shù)軟件開發(fā)者的夢想。 雖然Web技術(shù)給那些渴望尋求一次編寫方案的程序員們帶來了希望,但互聯(lián)網(wǎng)巨頭們卻一直未能根本解決這個問題。
不過,問題總會有答案的。
JavaScript是一門Web開發(fā)語言。如果Facebook一直這么堅持下去,JavaScript仍然將是開發(fā)人員構(gòu)建“一次編寫、到處運行”的iOS和Android應(yīng)用的主流語言。
過去幾年,F(xiàn)acebook一直在建設(shè)一個跨平臺的開發(fā)平臺--React。今年初, Facebook公布了React Native, 一個一次編寫就可以在所有平臺上運行的語言,該語言可以取代JavaScript用于構(gòu)建類原生的iOS和Android應(yīng)用。
React Native是Facebook基于“一次編寫,到處運行”理念的第二次大膽嘗試(第一次是HTML5),試圖用一套同樣的源碼來構(gòu)建Web、 iOS和Android應(yīng)用。盡管React Native還沒有迎來它的黃金時期,但Facebook已經(jīng)建好了一個看上去健壯且可伸縮的開發(fā)平臺來使用JavaScript構(gòu)建接近原生性能的應(yīng)用。
React Native: 為 iOS & Android 設(shè)計的開源框架

第一個React Native概念的具體應(yīng)用是一款叫做Facebook 廣告管理器的iOS應(yīng)用(為小型企業(yè)管理和創(chuàng)建廣告)。本周,F(xiàn)acebook宣布其已將大部分iOS版廣告管理器的代碼做了移植,成功構(gòu)建出了第一個React Native的Android應(yīng)用。
和iOS一樣, Facebook也已將React Native for Android開源, 讓任何開發(fā)者都可以使用React Native工具在任意的平臺上構(gòu)建APP應(yīng)用。Facebook的開發(fā)人員Daniel Witte和Philip von Weitershausen寫到,他們可以將85%的iOS廣告管理器Android版的代碼分享出來。
“當(dāng)所有事情都宣布并且完成后,我們兌現(xiàn)了自己的承諾--我們可以將Facebook第一個完整的React Native應(yīng)用部署到兩個平臺上,界面和操作與原生應(yīng)用并無兩樣,并且是由同一個JavaScript工程師組成的團隊構(gòu)建出來。”Witte和 von Weiterhausen寫到。
目前,React Native對iOS和Android兩個大平臺都已開源。 但這并不意味著每個程序員都可以輕松的在此平臺上用Javascript編寫iOS和Android應(yīng)用。據(jù)稱,F(xiàn)acebook在iOS的基礎(chǔ)上構(gòu)建Android版的廣告管理器應(yīng)用時遇到了很大的挑戰(zhàn)。
對于Facebook來說,最大的問題在平衡多個函數(shù)庫和兩套代碼源。一些iOS和Android之間的設(shè)計差異也需要被消除。
Witte和von Weiterhausen寫到:
React Native團隊隨著我們的App應(yīng)用開發(fā)一起研發(fā)出了平臺,并拿出了我們所需要的本地組件及API。那些組件可以為后面開發(fā)App的每個人帶來好處。即使我們不得不自己做一些組件出來,在純原生的系統(tǒng)上使用React Native仍然是值得做的一件事。我們?nèi)绻粚懩切┙M件,那些組件也就不會在將來被其他團隊重用。
通用APP時代的到來
幾個正在進行中的重大項目正在突破平臺和操作系統(tǒng)之間的障礙。React Native是Facebook強力推進的“一次編寫,到處運行”的開發(fā)框架。微軟也想要所有的代碼,給程序員們提供各種“方便的橋梁“這將能幫助他們從iOS, Android和Web上獲得代碼(和更老的Win32 app一起)用以構(gòu)建跨多個設(shè)備平臺的Windows 10 app應(yīng)用。
蘋果和Google在開始研究如何跨平臺地構(gòu)建App的時候并沒有和Facebook與微軟一起在相同的領(lǐng)域,但他們各自都在自己的生態(tài)系統(tǒng)里通過精簡的手段跨越設(shè)備之間的壁壘。蘋果已經(jīng)可以使用Xcode來為Apple Watch,iPhone,iPad,CarPlay構(gòu)建應(yīng)用,很快Apple TV也會使用相同的代碼庫。Google已經(jīng)擁有了能將Android應(yīng)用移植到ChromeOS上的能力,同時還會為Android TV,Auto和Watch提供hooks。
HTML5的成熟--加上CSS和Javascript--也會促進跨平臺開發(fā)的演進和發(fā)展。當(dāng)Facebook在幾年前使用HTML作為其移動應(yīng)用的基礎(chǔ)時,結(jié)果是有些作用但緩慢且不那么明顯。這是為什么Facebook拋棄了HTML5轉(zhuǎn)向用Objective-C和Java寫的原生app。但Facebook從沒有放棄跨平臺的夢想,他持續(xù)做出的努力終于開花結(jié)果--那就是擁有更穩(wěn)定平臺和更廣闊發(fā)展空間的React Native。