之前很多朋友問我這麼一個問題,說剛做 Android 開發不久,但是市面上被 H5,React Native 等這些移動趨勢衝擊的不得不考慮要不要轉頭學習 H5 或者 RN ,跟上時代以後才能有更好的發展,今天我就寫篇文章給大家詳細解惑下,並且說下我的看法。
Native App
Native 開發也即原生開發,如果你是做 Android 開發,那麼大部分都是用 Java 語言來編寫的,如果你是做 iOS 開發,則是使用 Objecttive C 或者 Swift 來進行編寫的,這些都是官方的標準,好處顯而易見,利用官方提供的 api ,開發的 app 有更好的效能,可以實現各種酷炫的效果,有更好的相容性,對使用者來說體驗更好。
但是有沒有壞處呢?有,比如你要開發一個 app ,一定是要 Android 端開發一個,iOS 端開發一個,從開發成本來說有點大,而且我們知道一旦程式出現 bug ,我們一般就只有重新釋出一個版本來進行更新,對於 Android 端還好,對於需要漫長稽核的 iOS 來說簡直是噩夢。所以為了解決這個問題,湧現了各種熱修復框架,但是畢竟都不是官方的,而且難免會有學習門檻,而且不可避免的是這類為修復 bug 而生的熱修復框架本身也有 bug 風險。
H5 App
H5 全稱是 HTML5 ,是 HTML 最新的標準,我們一開始經常看到的微信朋友圈廣告,一些推廣連結等大都是 H5 實現的,所以 H5 最近比較火,不過所謂 H5 實現一般都包含有 javascript ,這都是 web 前端工程師的基本技能,這也致使 web 前端工程師職位較火。
不過如果開發一個 H5 應用的話,那很簡單,你只需要在外面包裹一個殼就好了。拿 Android 來說,最簡單的直接包個 WebView 處理下就可以算是一個簡單的 H5 應用了,其他的交給 web 前端工程師就好了。
H5 應用的好處也是顯而易見,跨平臺,因為只需要在 Android 和 iOS 直接寫個殼就好了,大大減小了開發成本,而且 web 是實時渲染的,即使有 bug ,可以直接釋出就好了,也解決了熱修復的問題。
但是缺點很大:首先就是效能體驗太差,跟原生 App 的體驗簡直不能比,iOS 相對好些,Android 上的體驗簡直令人髮指,而且 Android 本身版本的碎片化嚴重,再加上國內各大手機廠商所謂的「定製」,體驗根本不能看,而且會遇到各種相容性問題,遠的不說,我在開發 Android 的過程中,就遇到不少適配的坑,有些你甚至都沒法解決,只能眼看著。
React Native
原生 App 體驗最好,但是不能跨平臺,H5 應用可以跨平臺,但是體驗太差。有沒有一種介於兩者之間的解決方案呢? React Native 橫空出世。
React Native 是 Facebook 工程師開源的一個框架,專案開源地址在這裡:
它的設計基於 React.js ,通過編寫 javascript 程式碼,中間做了一層直譯器,把相關的 js 解釋成原生元件,最終達到跟原生 App 差不多的體驗。注意,React Native 最終執行的不是 web ,這點我們團隊的小夥伴一開始也搞錯了,它最終執行在機器上的是原生的元件。
這解決方案是不是很完美?利用 js 的跨平臺特性,可以達到原生的效能與體驗,聽起來就帥爆了,加上又是 FB 巨頭提出來的方案,所以該專案一經開源,在移動圈就引起了熱烈反響。
但是如今一兩年的時間過去了,看看市面上有多少 App 是完全使用 React Native 來進行開發的,我想原因有下:
雖說效能與體驗比純 web 好多了,但是不管是 js 的執行還是多一層 js 到原生元件的解析渲染,所以效能上肯定是不如原生
React Native 是一種解決方案,但是該方案還不成熟,據我所知還有不少坑,去該 GitHub 專案主頁看下有多少 issue 就知道了,而且國內環境更復雜,你們懂得。
React Native 有不少限制,雖說它是一層 js 到原生元件的對映,但是並不是所有的元件,所有的元件的 api 都支援的,如果你親身之間,你會發現,很多產品經理的需求很難實現,這次真不是產品經理的需求太複雜,而是 RN 的限制確實不少。
所以,RN 是一種解決方案,是一種技術趨勢,但是完全不成熟,不建議在商業專案採用,但我們可以關注下,可以在業餘時間學習實踐下。
順便多說句,阿里不是前段時間也開源了一個框架 Weex 麼,可以說重新發明了類似 RN 的輪子,只不過它是基於 vue.js ,前幾天宣佈 vue.js 的作者以技術顧問的形式加入該專案組,但是我依然不看好該專案,一方面該專案會遇到 RN 上面的一些問題,另一方面阿里的專案大多是為自己的業務服務的,所以 Weex 應該有不少是跟自己的業務繫結緊密的,不一定適合大部分中小公司,我沒有親自實踐過,不過以上就是我個人的一些看法。
總結
所以綜上,我覺得我們時刻保持對技術的敏感性挺好的,但是不要過於杞人憂天,而且國內很多媒體言過其實,稍有點風吹草動,就會被吹的上天了,所以我們要有自己的判斷與實踐。我一直認為原生開發才是王道,無論到什麼時候,除非你不做 App 開發,或者說以後 App 死了,微信崛起了,不過起碼目前還看不到苗頭,也別相信什麼 App 已死的鬼話,那麼什麼時候 App 開始沒落呢?我也不知道,給大家一個我自己認為的指標做參考吧,什麼時候 QQ、微信、支付寶等推出新的使用方式的時候,可能代表 App 已死,仔細想想,我們從 PC 時代過渡到手機 App 時代,是不是基本上從手Q、支付寶推出移動應用開始的,只不過 App 時代造就了微信,這些巨頭的敏感性總歸要比個人要強吧。
對了,前段時間微信朋友圈推出了原生廣告,微信第一次把廣告體驗提升到了一個新高度,我想某種意義上是不是說明了什麼?
所以,建議大家不用再過度擔憂了,可以時刻保持著對新技術的敏感性,只要你目前還在做移動應用開發,現階段你依然需要提升你自己原生開發的能力,把重心放在原生開發上!
推薦關注我的微信公眾號 AndroidDeveloper「googdev」,第一時間獲取部落格更新!