綜合這段時間對ReactNative
(下稱RN)和NativeScript
(下稱NS)的簡單學習了解,分別從不同方面分析對比二者的優缺點。
頁面結構
NS一個頁面的目錄結構:
RN的一個頁面一般就是一個JS文件,樣式、XML、JS全部寫在一個文件里:
對比報告
ReactNative | NativeScript | 對比結果 | |
---|---|---|---|
與傳統web開發的差異性(學習成本) | 樣式、布局、邏輯控制等所有代碼都以JS的形式書寫,使用ES6語法(雖然可以使用ES5,但是官方推薦ES6),對於沒有接觸過ES6的新手有一定學習成本,要求開發者最好對原生有一定了解。 | 與傳統web開發方式非常接近,只不過把html換成了xml,樣式的寫法也是遵照web中css的方式,很多api也與web更接近,相比RN而言api更簡單,新手更易於接受,整體而言學習成本比RN要低 | NS 勝 |
CSS豐富程度 | 比較匱乏,只支持有限的幾十種樣式,相比web中幾百種豐富高級的樣式,RN在這一點顯得特別不夠用,就連最基本的控制元素顯示與隱藏都要通過其他方式變相實現 | 也比較匱乏,也只支持幾十種樣式,NativeScript支持的CSS列表 | 二者都不夠豐富 |
github star 數 | react-native有39848個star(截止2016-11-03) | NativeScript有8536個star(截止2016-11-03) | RN勝 |
社區資源 | 比較豐富,網上N多相關學習介紹文章,有非常豐富的中文學習資源 | 學習資源較為匱乏,很少中文學習資料,一般只能從官網學習 | RN勝 |
API文檔豐富程度 | 個人覺得比較混論,doc和api混為一談,沒有專門的API文檔 | 有專門的API文檔 | NS勝 |
是否支持按鍵監聽 | 不支持,找遍全網也沒找到相關方法,不過自己實現比較簡單(已經實現) | 也不支持,因為設計的初衷就是做移動APP的,暫時沒有去嘗試自己實現,所以不知道難易程度 | 二者都不支持 |
是否支持與原生混合開發 | 支持,可以隨時打開AndroidStuido 修改原生代碼,甚至可以往一個現有的Android項目中添加RN的支持 |
所有涉及原生的功能都要以開發插件的形式增加,而且插件開發涉及原生和JS雙邊,暫不清楚插件開發的難易程度 | RN勝 |
插件豐富程度 | 這一點與社區資源類似,由於關注的人多,所以插件也很豐富 | 插件相對而言沒有RN豐富 | RN勝 |
性能 | HTML5 < RN < 原生,具體和原生差多少還未知,電視上測試時光標移動流暢 | HTML5 < NS < 原生,具體與原生差多少也未知,由於不支持按鍵監聽,暫未在電視上測試 | 由於二者的工作原理類似,都是采用JS引擎將XML翻譯成原生的布局,所以估計二者性能差不多 |
熱更新 | 支持,已測試成功,增量更新暫未嘗試(理論上可行),熱更新之后必須重啟生效 | 支持,已測試成功,熱更新之后CSS和XML可以立即生效,JS需重啟生效 | 都支持 |
界面開發難易程度 | 對於習慣web開發的開發者而言,個人覺得比較大,想實現一個復雜點的界面需要折騰半天 | 和RN類似,布局開發對於前端開發者有一定的適應期 | 都不算容易 |
生成的APK體積 | HelloWorld 項目大約7M多 |
HelloWorld 項目大約12M多 |
RN勝 |
最低支持Android版本 | 暫不清楚最低支持多少,已知支持Android4.1 | 最低Android4.2 | RN勝 |
動畫開發難易程度 | 比較麻煩,需要比較多的代碼來實現 | CSS即可實現動畫,類似web中的@key-frames 形式,對於前端開發者而言非常容易掌握 |
NS勝 |
遠程調試 | 默認支持Chrome調試JS,但不能調試界面 | 暫不清楚 | 未知 |
坑 | 雖然這么多人在關注,但是由於出來沒多久,坑比較多,特別是Android平台相比IOS平台更多 | 坑也很多 | 都多 |
圖片地址可否動態拼接 | 不可以,網絡圖片可以,本地非資源圖片必須以類似require('../images/logo.png') 的方式加載,且圖片路徑不能是變量和動態拼接,這一點非常坑爹 |
可以隨意指定,可以隨意拼接 | NS勝 |
直接修改圖片地址 | 不可以,只能通過state動態實現 | 可以,與web方式非常類似,直接通過var img = page.getViewById("logo") 拿到圖片對象,然后img.set('src', 'test.jpg') 即可 |
NS勝 |