作者:hi大頭鬼hi
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
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使用過程中遇到的一些問題,當然具體決定使用那個框架,我覺得需要從一下幾個方面來做對比:
學習成本
-
環境配置:
ReactNative需要按照文檔安裝配置很多依賴的工具,相對比較麻煩。 weex安裝cli之後就可以使用
-
vue vs react
react模板JSX學習使用有一定的成本 vue更接近常用的web開發方式,模板就是普通的html,數據綁定使用mustache風格,樣式直接使用css
-
佈局
兩者實現了flexbox的相同子集(都使用了FaceBook的代碼解析),基本沒有區別
易用性
-
sdk使用
ReactNative需要解決mvn依賴的問題,因此必須自己修改源碼,打包發佈
weex可以直接在mvn項目中使用
-
調試
都可以在chrome中調試JS代碼
weex支持在chrome中預覽頁面dom節點,ReactNative不支持
-
頁面開發
weex提供了一個playground,可以方便的預覽正在開發的頁面
ReactNative開發一個頁面,需要建立一個native工程,然後編譯運行
-
即時預覽
weex和ReactNative都有提供hot reload功能,可以邊更改代碼,邊在手機上看到效果
-
打包
ReactNative官方只能將ReactNative基礎js庫和業務js一起打成一個js bundle,沒有提供分包的功能,需要製作分包打包工具
weex默認打的js bundle只包含業務js代碼,體積小很多,基礎js庫包含在weex sdk中
-
部署
斑馬目前同時支持weex和ReactNative頁面,但是中心已經轉向weex
另外斑馬提供了可以拖拽搭建weex活動頁面的功能
-
擴展性
組件的擴展上,weex和ReactNative具有一樣的能力
三方庫的接入上,weex對網絡,圖片,統計等常見的用戶可能想自己定製的功能,提供了相應的適配接口,可以由用戶方便的定製,ReactNative需要自己修改源碼
-
集團庫接入
weex有默認的mtop接入實現,UT接入實現
windvane也提供了對weex頁面的支持,可以複用app中的web容器
-
跨平臺
ReactNative支持Android iOS兩個平臺,需要自己擴展去支持web,windows和node-webkit的支持正在開發中
weex可以支持Android iOS web三個平臺
-
Moudle方法調用線程
weex 可以通過註解標註是否在UI線程執行
ReactNative在native_modules線程執行
-
異步
weex只支持callback
ReactNative提供了Promise的支持
性能
-
分包加載
ReactNative需要自己實現,從而優化JS加載執行時間
weex默認提供分包實現
-
官方支持
ReactNative官方關注的重心目前並不在性能上
weex持續關注性能優化
-
大塊view渲染
ReactNative默認沒有優化機制,長view渲染性能會比較差
weex提供了node和tree兩種渲染模式,優化長view的渲染
-
ListView Android
ReactNative目前採用scrollView使用,有一些性能問題
weex使用recyclerview實現,性能稍好
社區
ReactNative 3w+ star,issue,pull request, contributor多,社區活躍,圍繞react產生了許多開發框架
weex開源較晚,目前只有4k+ start,contributor以阿里人爲主,較少,issue和pull request也比較少,社區目前規模比較小
工具鏈
-
debug tool
都有提供在chrome中調試的支持
-
打包工具
ReactNative需要自己改造
weex默認提供的足夠滿足使用需求
-
webpack,gulp,腳手架工程
weex有相應的插件,方便開發,部署使用
ReactNative有,但是很久未更新,需要自己維護
通過上面的一些對比,就我個人來說,我還是比較傾向於使用weex,我比較熟悉vue是一方面,另外性能和發佈這一塊也是我比較關注的點。使用ReactNative確實也可以做到不錯,但是最終我發現,自己其實是在做weex團隊已經做的事情。與其這樣,爲什麼我不選擇weex,去幫助weex解決一些其他問題,給自己留更多時間去做業務開發呢?另外從業務開發的角度,我也覺得weex的門檻相對比較低,更適合業務開發同學上手,簡單就是不簡單。
歡迎大家和我討論