公司新產品要求發佈到各家小程序,最近研究對比了社區主流的幾家小程序開發框架,獨坑不如拉人衆坑,分享給各位,歡迎和我一塊兒入坑:)css
最近老闆不知怎的很重視各類小程序平臺,感受要靠小程序完成今年大半kpi。。。 產品和運營天然找咱們要方案,一方面要快速鋪開各類小程序,另外一頭hr又不給前端團隊加headcount,我只能前端
目前幾桿槍,主要在微信和H5上,若按照各家規範進行原生小程序開發,確定是不夠的;vue
所幸業內有人在作跨各類小程序的框架,趁機研究一番,看看到底作的怎麼樣。react
咱們主要分析了以下小程序開發框架(應該差很少全了),主要包括:git
框架 | 技術棧 | 案例 | 微信小程序 | 支付寶小程序 | 百度小程序 | 頭條小程序 | H5 | App |
---|---|---|---|---|---|---|---|---|
Taro | React | 豐富 | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ |
娜娜奇 | React | 少 | ⭕ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ❌ |
wepy | Vue | 豐富 | ⭕ | ❌ | ❌ | ❌ | ❌ | ❌ |
mpvue | Vue | 豐富 | ⭕ | ❌ | ❌ | ❌ | ⭕️ | ❌ |
uni-app | Vue | 豐富 | ⭕ | ⭕️ | ⭕️ | ⭕ | ⭕️ | ⭕ |
megalo | Vue | 少 | ⭕ | ⭕️ | ⭕️ | ❌ | ❌ | ❌ |
OKAM | Vue | 少 | ⭕ | ⭕ | ⭕ | ⭕ | ❌ | ❌ |
Mpx | Vue | 少 | ⭕ | ❌ | ❌ | ❌ | ❌ | ❌ |
Tips:如上表格包含了各框架在微信、支付寶、百度、頭條、H五、App多平臺的支持狀況,鑑於掘金的markdown表格排版限制,你須要向右滑動查看完整支持對比。github
咱們的篩選權重:vuex
最後,咱們決定把taro、uni-app兩個框架做爲候選,作進一步對比。 uni-app其實內置了mpvue,感受是個增強版,拓展到多端了。 其實這2個框架的github star差的有點多,taro遠超uni-app,但不能根據這個直接作決定,對比報告仍是得作的,果真最後發現不能以star取人。vue-cli
看了幾天文檔對2個框架大概摸到門道,理了下對比思路,仍是認真從以下幾個維度比較下taro、uni-app兩個框架:npm
數量對比小程序
雙方都宣傳能支持微信、百度、支付寶、今日頭條等小程序,H5,以及iOS和Android的App。看起來都不錯。
質量對比
爲驗證最終跨端效果,咱們分別下載 taro、uni-app的示例項目,體驗編譯到不一樣平臺的運行效果。
首先選擇 taro 官方帳號下的知乎小程序示例(github地址),運行到各端後的效果:
從如上截圖來看,taro成功實現了多端編譯;咱們接着更細緻的對比了一下各端運行,發現taro在以下方面存在問題:
以後點擊二級頁、三級頁,發現H5端的其它問題:
針對這些問題,咱們複查了一遍taro官網,官網卻是明確說明部分事件函數在H5端不生效,主要包括:
方法 | 做用 |
---|---|
onPullDownRefresh | 頁面相關事件處理函數--監聽用戶下拉動做 |
onReachBottom | 頁面上拉觸底事件的處理函數 |
onShareAppMessage | 用戶點擊右上角轉發 |
onPageScroll | 頁面滾動觸發事件的處理函數 |
onTabItemTap | 當前是 tab 頁時,點擊 tab 時觸發 |
不過進一步仔細發現,taro文檔裏大量存在只有微信平臺打勾的狀況,H5和App側大量的X。這說明跨其餘平臺很難平滑遷移。
接着運行uni-app示例項目,選擇官方帳號下的看圖App模板(github地址)測試,運行到各端後效果:
從上圖來看,uni-app 一樣成功的實現了多端編譯;咱們接着更細緻的對比了一下各端運行,發現以下問題:
以後點擊二級頁、三級頁,沒再發現明顯問題。
從兩個項目的實際運行來看,uni-app的跨端效果更好(其實不止對比了官方demo,咱們本身也寫了小demo),特別是在H5平臺相比taro要完善很多。
另外,在進行兩個框架的發行編譯時,咱們還發現了一個差別點:
dist
目錄下不區分編譯平臺,同一時間僅可編譯到一個平臺,不支持多個平臺對比查看運行效果;dist
目錄區分編譯平臺,故支持同時編譯到多個平臺,可同時對比查看不一樣平臺運行效果,這個體驗是不錯的,更有跨端開發的感受 另外uni-app的條件編譯比較完善,這個在處理平臺差別時頗有用。案例對比
兩個框架都在官網放上了衆多案例,只是taro案例清一色是微信小程序,沒看到其餘端,難道你們使用taro,只是爲了用react開發微信小程序,不須要跨端?
uni-app的案例什麼平臺都有,不少App作了多個平臺。提及來咱們領導還問過跨iOS、Android App的事情,不過目前另有原生團隊,咱們也只是作個備份調研。最終仍是決定先把前端的技術統一了,穩定後再考慮App是否也遷移到這類框架下。
綜合比較,uni-app跨端質量更好,真實跨端案例也更多。
咱們在網上查閱了一些文章,有人認爲taro的運行性能好於mpvue,而uni-app集成了mpvue,這個性能問題就得重點關注了。
不論是taro仍是uni-app,setData
的優化都是小程序性能優化中最爲重要之事,且優化主要有兩個方向:
setData
調用的頻次setData
傳輸的數據而後在調研中發現,uni-app其實還集成了另外一個前述參選的框架megalo
(怎麼都被它揉進去了)
前面調研時知道megalo
是作了差量數據更新的,那就應該問題不大。
咱們本身動手寫了一個長列表測試,分別寫了taro版、uni-app版、原生小程序版,前幾頁數據滾動時差很少,七、8頁過去發現uni-app加載新頁面時有變慢的感受。 推測uni-app的長列表沒有recycle機制,花了點時間把demo改進了下,滾動下面時把前面幾頁的數據幹掉,而後再滾動就感覺不到流暢度的差異了。
總結:taro在性能優化上作的更細緻,使用uni-app須要本身注意代碼優化。
taro 和 uni-app 的環境搭建及項目建立、運行編譯都比較簡單。
taro的安裝及使用:
# 全局安裝 @tarojs/cli
$ npm install -g @tarojs/cli
# 建立 taro 項目
$ taro init myApp
# 進入項目目錄
$ cd myApp
# 運行到微信小程序,調試模式
$ npm run dev:weapp
# 發行到微信小程序
$ npm run build:weapp
複製代碼
uni-app的安裝及使用:
# 全局安裝 vue-cli
$ npm install -g @vue/cli
# 建立uni-app項目
$ vue create -p dcloudio/uni-preset-vue my-project
# 進入項目目錄
$ cd my-project
# 運行到微信小程序,調試模式
$ npm run dev:mp-weixin
# 發行到微信小程序
$ npm run build:mp-weixin
複製代碼
開發流程方面,taro和uni-app均是以微信小程序爲基礎,也都針對小程序的開發弊端,提供了更優秀的體驗,好比:
開發工具方面,taro官方未特別推薦IDE,但提供了vscode支持的d.ts; uni-app推薦的開發工具是他自家的HBuilderX,用它能夠不配環境,開箱即用; hbuilder之前接觸過,當時沒深研究,新版還挺讓我意外,真沒想到國人的開發工具能夠作到這樣,尤爲是他家的markdown支持真心不錯,因而本文就是在hbuilder裏寫的(已經有情感分了哈哈)。
總結:兩個框架都支持現代前端開發流程。hbuilder對uni-app提供了優化定製,但對不熟悉的開發者有必定適應成本。另外hbuilder自帶一個編譯器,和cli裝在項目下的編譯器是2個,這個坑很多新人要注意別踩。
學習交流
Taro經過Github Issues+微信羣方式交流,微信羣活躍,貢獻代碼的人也多。
uni-app有專門的論壇,還有視頻教程,QQ羣微信羣都活躍。
另外文檔角度,uni-app的文檔比taro要完善,數了數交流羣的數量,也是uni-app多很多。
生態
taro官方發佈了taro-ui庫,awesome裏三方組件不太多。
uni-app官方發佈了uni-ui庫,還有個插件市場,裏面輪子不少,作業務應該能夠很快拼輪子作出來。
櫥窗裏的衣服再漂亮,適合本身的纔有用,開發框架亦是如此。
咱們根據業務需求及團隊成員現狀,造成以下對比:
所以,咱們團隊最後決定使用uni-app做爲新項目的開發框架。
但挺誠心感謝其餘開源框架的做者的,各位大牛的無私奉獻,讓咱們能夠節省這麼多人力,拜謝! 喜歡taro的朋友也莫噴我,你們各有所好,react和vue誰更好之類的罵戰就不要繼續延續到這裏了。
接下來確定會有不少uni-app的坑,等着咱們去跳,但我等猿類的宿命就是不斷跳坑、爬坑ㄟ( ▔, ▔ )ㄏ,待咱們項目結束,再寫一篇《uni-app爬坑血淚史》分享給你們。
============end============
沒想到今天正好在掘金看到uni-app的廣告了^_^