標籤:
前言
幾天前,Facebook 在 React.js Conf 2015 大會上推出了 React Native( 視頻連結)。我發了一條微博( 地址),結果引來了 100 多次轉寄。為什麼 React Native 會引來如此多的關注呢?我在這裡談談我對 React Native 的理解。
一個新架構的出現總是為瞭解決現有的一些問題,那麼對於現在的移動開發人員來說,到底有哪些問題 React Native 能涉及呢?
人才稀缺的問題
首先的問題是:移動開發人才的稀缺。看看那些培訓班出來的人吧,經過 3 個月的培訓就可以拿到 8K 甚至上萬的工作。在北京稍微有點工作經驗的 iOS 開發,就要求 2 萬一個月的工資。這說明當前移動互連網和創業的火熱,已經讓業界沒有足夠的開發人才了,所以大家都用漲工資來搶人才。而由於跨平台的架構(例如 PhoneGap,RubyMotion)都還是不太靠譜,所以對於稍微大一些的公司,都會選擇針對 iOS 和 Android 平台分別做不同的定製開發。而 JavaScript 顯然是一個群眾基礎更廣的語言,這將使得相關人才更容易獲得,同時由於後面提到的代碼複用問題得到解決,也能節省一部分開發人員。
代碼複用的問題
React Native 雖然強調自己不是 “Write once, run anywhere” 的架構,但是它至少能像 Google 的 j2objc 那樣,在 Model 層實現複用。那些底層的、與介面無關的邏輯,相信 React Native 也可以實現複用。這樣,雖然 UI 層的工作還是需要做 iOS 和 Android 兩個平台,但如果抽象得好,Logic 和 Model 層的複用不但可以讓代碼複用,更可能實現底層的邏輯的單元測試。這樣移動端的代碼品質將更加可靠。
其實 React Native 宣傳的 “Learning once, write anywhere” 本身也是一種複用的思想。大家厭煩了各種各樣的程式設計語言,如果有一種語言真的能夠統一移動開發領域,對於所有人都是好事。
UI 排版的問題
我自己一直不喜歡蘋果新推出的 AutoLayout 那套解決方案,其實 HTML 和 CSS 在介面布局和呈現上深耕多年,Android 也是借鑒的 HTML 的那套方案,蘋果完全可以也走這套方案的。但是蘋果選擇發明了一個 Constraint 的東西來實現排版。在企業的開發中,其實大家很少使用 Xib 的,而手寫 Constraint 其實是非常痛苦的。所以出現了 Masonry 一類的開源架構來解決這類同行的痛苦。
我一直在尋找使用類似 HTML + CSS 的排版,但是使用原生控制項渲染的架構。其實之前 BeeFramework 就做了這方面的事情。所以我還專門代表 InfoQ 對他進行過採訪。BeeFramework 雖然開源多年,而且有 2000 多的 star 數,但是受限於它自身的影響力以及架構的複雜性,一直沒有很大的成功。至少我不知道有什麼大的公司採用。
這次 Facebook 的 React Native 做的事情相比 BeeFramework 更加激進。它不但採用了類似 HTML + CSS 的排版,還把語言也換成了 JavaScript,這下子改變可以稱作巨大了。但是 Facebook 有它作為全球互連網企業的光環,相信會有不少開發人員跟進採用 React Native。
不過也說回來,Facebook 開源的也不一定都好,比如 three20 就被 Facebook 放棄了,但是不可否認 three20 作為一個架構,在那個時期的特定價值。所以 React Native 即使沒有成功,它也將人們關注的焦點放在了移動開發的效率上了。很可能會有越來越多相關的架構因此湧現出來。
MVVM
MVVM 在 Web 開發領域相當火熱,而 iOS 領域的 ReactiveCocoa 雖然很火,但是還是非常小眾。糾其原因,一方面是 ReactiveCocoa 帶來的編程習慣上的改變實在太大,ReactiveCocoa 和 MVVM 的學習成本還是很高。另一方面是 ReactiveCocoa 在代碼可讀性、可維護性和協作上不太友好。
而 Web 開發領域對 MVVM 編程模式的接受程度就大不相同了,在 Web 開發中有相當多的被廣泛使用的 MVVM 的架構,例如 AngularJS。相信 React Native 會推動 MVVM 應用在移動端的開發。
動態更新
終於說到最 “雞凍人心” 的部分了。你受夠了每次發新版本都要審核一個星期嗎?蘋果的審核團隊在效率上的低下,使得我們這一群狠不得每天迭代更新一版的敏捷Team Dev被迫每 2 周或 1 個月更新一次版本。很多團隊上一個版本還沒審核結束,下一個版本就做好了。
React Native 的語言是基於 JavaScript,這必然會使得代碼可以從伺服器端動態更新成為可能。到時候,每天更新不再是夢想。當然,代碼的安全性將更一步受到挑戰,如何有效保護核心代碼的安全將是一個難題。
總結
不管怎麼樣,這確確實實是一個移動互連網的時代,我相信隨著幾年的發展,移動互連網的開發生態也會積累出越來越多寶貴的架構,以支撐出更加偉大的 App 出現。作為一個移動開發人員,我很高興能夠成為這個時代的主角,用移動開發技術改變人們的生活。
談談 React Native