weex&ReactNative對比

作者:hi大頭鬼hi

鏈接:https://zhuanlan.zhihu.com/p/21677103
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

weex開源有一段時間了,其實去年剛聽說weex這個項目的時候,我就對它很感興趣,很大程度上是因爲我自己對vue的喜愛。我從13年左右開始接觸vue,14年開始熟悉這個輕量的框架,並慢慢的推薦給了身邊的朋友,當我得知手淘的weex是基於vue的時候,就有了想了解一下的衝動。在weex開源之前,我剛好有幾個月的時間一直在致力於ReactNative的優化改造,加上自己之前使用ReactJS的一些經驗,對於ReactNative項目也算有了一些自己的見解。趁着weex開源了,趕在前幾天,我花了兩三天的時間把weex android的源碼完整的看了一遍,前端js代碼也粗略看了一下,結合自己對ReactNative源碼的一些瞭解,正好在這裏對兩者做一個儘量中立的比對。

首先,我們要承認,weex的確是站在ReactNative的肩膀上的,核心思想上兩者並沒有大的區別,直觀的看上去,我認爲有三個主要的區別:

JS引擎:

weex使用V8, ReactNative使用JSCore

JS開發框架:

weex基於vue.js(2W+ star)。小巧輕量的前端開發框架,組件化,數據綁定,2.0引入virtual dom。

ReactNative使用React(4W+ star)。革命性的前端開發框架,組件化,數據綁定,virtual dom。

Android版本要求:

ReactNative使用了Choreographer,因此必須在API16以上纔可以使用。

weex使用handler來代替Choreographer,可以在API14以上使用。

weex出來的初衷也是爲了解決ReactNative使用過程中遇到的一些問題,當然具體決定使用那個框架,我覺得需要從一下幾個方面來做對比:

學習成本

  1. 環境配置:

    ReactNative需要按照文檔安裝配置很多依賴的工具,相對比較麻煩。 weex安裝cli之後就可以使用

  2. vue vs react

    react模板JSX學習使用有一定的成本 vue更接近常用的web開發方式,模板就是普通的html,數據綁定使用mustache風格,樣式直接使用css

  3. 佈局

    兩者實現了flexbox的相同子集(都使用了FaceBook的代碼解析),基本沒有區別

易用性

  1. sdk使用

    ReactNative需要解決mvn依賴的問題,因此必須自己修改源碼,打包發佈

    weex可以直接在mvn項目中使用

  2. 調試

    都可以在chrome中調試JS代碼

    weex支持在chrome中預覽頁面dom節點,ReactNative不支持

  3. 頁面開發

    weex提供了一個playground,可以方便的預覽正在開發的頁面

    ReactNative開發一個頁面,需要建立一個native工程,然後編譯運行

  4. 即時預覽

    weex和ReactNative都有提供hot reload功能,可以邊更改代碼,邊在手機上看到效果

  5. 打包

    ReactNative官方只能將ReactNative基礎js庫和業務js一起打成一個js bundle,沒有提供分包的功能,需要製作分包打包工具

    weex默認打的js bundle只包含業務js代碼,體積小很多,基礎js庫包含在weex sdk中

  6. 部署

    斑馬目前同時支持weex和ReactNative頁面,但是中心已經轉向weex

    另外斑馬提供了可以拖拽搭建weex活動頁面的功能

  7. 擴展性

    組件的擴展上,weex和ReactNative具有一樣的能力

    三方庫的接入上,weex對網絡,圖片,統計等常見的用戶可能想自己定製的功能,提供了相應的適配接口,可以由用戶方便的定製,ReactNative需要自己修改源碼

  8. 集團庫接入

    weex有默認的mtop接入實現,UT接入實現

    windvane也提供了對weex頁面的支持,可以複用app中的web容器

  9. 跨平臺

    ReactNative支持Android iOS兩個平臺,需要自己擴展去支持web,windows和node-webkit的支持正在開發中

    weex可以支持Android iOS web三個平臺

  10. Moudle方法調用線程

    weex 可以通過註解標註是否在UI線程執行

    ReactNative在native_modules線程執行

  11. 異步

    weex只支持callback

    ReactNative提供了Promise的支持

性能

  1. 分包加載

    ReactNative需要自己實現,從而優化JS加載執行時間

    weex默認提供分包實現

  2. 官方支持

    ReactNative官方關注的重心目前並不在性能上

    weex持續關注性能優化

  3. 大塊view渲染

    ReactNative默認沒有優化機制,長view渲染性能會比較差

    weex提供了node和tree兩種渲染模式,優化長view的渲染

  4. ListView Android

    ReactNative目前採用scrollView使用,有一些性能問題

    weex使用recyclerview實現,性能稍好

社區

ReactNative 3w+ star,issue,pull request, contributor多,社區活躍,圍繞react產生了許多開發框架

weex開源較晚,目前只有4k+ start,contributor以阿里人爲主,較少,issue和pull request也比較少,社區目前規模比較小

工具鏈

  1. debug tool

    都有提供在chrome中調試的支持

  2. 打包工具

    ReactNative需要自己改造

    weex默認提供的足夠滿足使用需求

  3. webpack,gulp,腳手架工程

    weex有相應的插件,方便開發,部署使用

    ReactNative有,但是很久未更新,需要自己維護

通過上面的一些對比,就我個人來說,我還是比較傾向於使用weex,我比較熟悉vue是一方面,另外性能和發佈這一塊也是我比較關注的點。使用ReactNative確實也可以做到不錯,但是最終我發現,自己其實是在做weex團隊已經做的事情。與其這樣,爲什麼我不選擇weex,去幫助weex解決一些其他問題,給自己留更多時間去做業務開發呢?另外從業務開發的角度,我也覺得weex的門檻相對比較低,更適合業務開發同學上手,簡單就是不簡單。

歡迎大家和我討論


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章