幾天前,Facebook 在 React.js Conf 2015 大會上推出了 React Native(視頻連接)。我發了一條微博(地址),結果引來了 100 屢次轉發。爲何 React Native 會引來如此多的關注呢?我在這裏談談我對 React Native 的理解。git
一個新框架的出現老是爲了解決現有的一些問題,那麼對於如今的移動開發者來講,到底有哪些問題 React Native 能涉及呢?github
首先的問題是:移動開發人才的稀缺。看看那些培訓班出來的人吧,通過 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」 自己也是一種複用的思想。你們厭煩了各類各樣的編程語言,若是有一種語言真的可以統一移動開發領域,對於全部人都是好事。服務器
我本身一直不喜歡蘋果新推出的 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 在 Web 開發領域至關火熱,而 iOS 領域的 ReactiveCocoa 雖然很火,可是仍是很是小衆。糾其緣由,一方面是 ReactiveCocoa 帶來的編程習慣上的改變實在太大,ReactiveCocoa 和 MVVM 的學習成本仍是很高。另外一方面是 ReactiveCocoa 在代碼可讀性、可維護性和協做上不太友好。學習
而 Web 開發領域對 MVVM 編程模式的接受程度就大不相同了,在 Web 開發中有至關多的被普遍使用的 MVVM 的框架,例如 AngularJS。相信 React Native 會推進 MVVM 應用在移動端的開發。
終於說到最 「雞凍人心」 的部分了。你受夠了每次發新版本都要審覈一個星期嗎?蘋果的審覈團隊在效率上的低下,使得咱們這一羣狠不得天天迭代更新一版的敏捷開發團隊被迫每 2 周或 1 個月更新一次版本。不少團隊上一個版本還沒審覈結束,下一個版本就作好了。
React Native 的語言是基於 JavaScript,這必然會使得代碼能夠從服務器端動態更新成爲可能。到時候,天天更新再也不是夢想。固然,代碼的安全性將更一步受到挑戰,如何有效保護核心代碼的安全將是一個難題。
無論怎麼樣,這確確實實是一個移動互聯網的時代,我相信隨着幾年的發展,移動互聯網的開發生態也會積累出愈來愈多寶貴的框架,以支撐出更加偉大的 App 出現。做爲一個移動開發者,我很高興可以成爲這個時代的主角,用移動開發技術改變人們的生活。
願你們珍惜這樣的機會,玩得開心~