小程序開源框架選型

從 2016 年微信小程序內(nèi)測到現(xiàn)在近她,各大公司對小程序的業(yè)務開發(fā)需求越來越大,但是微信的原生工具在實際使用時很不便捷坡脐,尤其是業(yè)務比較復雜的項目很難通過其進行管理和迭代赐俗。

使用原生開發(fā)的問題:

小程序本身不支持常用的 css 預編譯器

不支持 ES7 以上的高級語法檩电,如 async await 等特性;

不支持工程化挡篓,如環(huán)境捅暴、變量等管理

缺少統(tǒng)一的 request 攔截請求

缺少統(tǒng)一的本地緩存讀取管理

目前市面上開源的框架可以幫助我們解決上述問題恬砂,有些框架還有比較便捷的腳手架工具、以及支持多端的能力蓬痒。本文將從業(yè)務功能的滿足度泻骤、接入成本、項目性能梧奢、可維護性等多方面對現(xiàn)有框架進行介紹和對比狱掂,為大家在項目中選擇開源框架時提供一個參考。

1.框架介紹

1.1 Wepy

WePY (發(fā)音: /'wepi/)是一款讓小程序支持組件化開發(fā)的框架亲轨,通過預編譯的手段讓開發(fā)者可以選擇自己喜歡的開發(fā)風格去開發(fā)小程序趋惨。框架的細節(jié)優(yōu)化惦蚊、Promise器虾、Async Functions 的引入等都是為了能讓開發(fā)小程序項目變得更加簡單,高效蹦锋。

其特點如下圖所示:

1.2 Mpvue

Mpvue 是一個使用 Vue.js 開發(fā)小程序的前端框架兆沙。框架基于 Vue.js 核心莉掂,Mpvue 修改了 Vue.js 的 runtime 和 compiler 實現(xiàn)葛圃,使其可以運行在小程序環(huán)境中,從而為小程序開發(fā)引入了整套 Vue.js 開發(fā)體驗。

主要特性:

徹底的組件化開發(fā)能力:提高代碼復用性

完整的 Vue.js 開發(fā)體驗

方便的 Vuex 數(shù)據(jù)管理方案:方便構建復雜應用

快捷的 webpack 構建機制:自定義構建策略装悲、開發(fā)階段 hotReload

支持使用 npm 外部依賴

使用 Vue.js 命令行工具 vue-cli 快速初始化項目

H5 代碼轉換編譯成小程序目標代碼的能力

1.3 Taro

Taro 是一套遵循 React 語法規(guī)范的多端開發(fā)解決方案昏鹃。

1.4 Uni-app

Uni-app 是一個使用 Vue.js 開發(fā)跨平臺應用的前端框架。

1.5 Chamelon

Chameleon/k??mi?l??n/诀诊,簡寫 CML洞渤,中文名卡梅龍;中文意思變色龍属瓣,意味著就像變色龍一樣能適應不同環(huán)境的跨端整體解決方案载迄。

主要特性:

目錄結構:提供規(guī)范化的項目結構,適合于企業(yè)級大型應用的開發(fā)抡蛙。

視圖層:視圖層由 CML 與 CMSS 編寫护昧,核心是一個標準響應式數(shù)據(jù)驅動視圖更新。

邏輯層:邏輯層由 javascript 編寫粗截,邏輯層將處理數(shù)據(jù)后自動更新視圖惋耙,提供視圖層的事件響應方法。

多態(tài)協(xié)議:提供了跨端時各端底層組件與接口統(tǒng)一的解決方案熊昌。

規(guī)范校驗:為了提高開發(fā)的效率與代碼的可維護性绽榛,提供了全面的代碼規(guī)范與校驗。

2.框架選型

2.1 業(yè)務功能的滿足度

一般公司開發(fā)團隊對業(yè)務功能的需求婿屹,有兩種:

小程序原生基本業(yè)務功能的開發(fā)灭美,包括用戶登錄、內(nèi)容展示昂利、頁面交互届腐、圖片文檔查看等等

頁面開發(fā)一版支持微信小程序、百度小程序蜂奸、H5 或快應用等多端兼容需求

2.1.1 基本業(yè)務功能

Wepy犁苏、Mpvue、Taro扩所、Uni-app傀顾、Chamelon 幾種框架已經(jīng)支持小程序原生的大部分組件、API碌奉,在一般業(yè)務功能的開發(fā)上沒有太大的差異性短曾,在新功能的支持力度上略有差異。

從各框架最新版本的更新內(nèi)容和時間來看赐劣,Taro嫉拐、Uni-app 和 Chameleon 對新功能的支持力度比較好,尤其 Taro 框架支持了小程序原生的寫法魁兼,這樣即使框架不支持的小程序 API 也可以在不修改項目框架的前提下使用婉徘。

2.1.2 多端兼容需求

WepyMpvueTaroUni-appChameleon

微信小程序支持支持支持支持支持

支付寶小程序不支持支持支持支持不支持

百度小程序不支持支持支持支持不支持

頭條小程序不支持支持支持支持不支持

H5不支持不支持支持支持支持

React Native不支持不支持支持不支持不支持

快應用不支持不支持支持不支持不支持

QQ小程序不支持不支持支持支持不支持

Android原生不支持不支持不支持支持不支持

iOS原生不支持不支持不支持支持不支持

Chameleon Playground App不支持不支持不支持不支持支持

Weex playground App不支持不支持不支持不支持支持

從框架對各端的兼容性來看,Taro 和 Uni-app 對各端的兼容能力較強

2.2 接入成本

選擇框架并接入到團隊內(nèi)盖呼,需要兩種成本:

代碼成本:新項目建立項目模板成本儒鹿、老項目代碼遷移成本

學習成本:團隊內(nèi)的開發(fā)人員從 0 到 1 熟練使用框架的成本

2.2.1 Wepy

接入成本

給新起項目提供了 cli 能力:

$ npm install@wepy/cli -g# 全局安裝 WePY CLI 工具$ wepy init standard myproj# 使用 standard 模板初始化項目$ cd myproj# 進入到項目目錄$ npm install# 安裝項目依賴包$ npm run dev# 監(jiān)聽并且編譯項目

復制代碼

未給老項目遷移提供能力,只能手動遷移代碼几晤。

學習成本

Wepy 有一個比較簡單的開源文檔约炎,Wepy 的語法糖是類 Vue,基本項目結構和原生小程序類似蟹瘾,對熟悉 Vue 和小程序的同學來說學習成本很低圾浅。

一個簡單的 Wepy 代碼示例:

.container {? height: 100%;}importwepyfrom'wepy'exportdefaultclassextendswepy.app{? config = {pages: ['pages/index'? ? ],window: {navigationBarTitleText:'日歷'? ? }? }}

復制代碼

2.2.2 Mpvue

接入成本

給新起項目提供了 cli 能力:

# 1. 全局安裝 vue-cli$ npm install --global vue-cli@2.9# 2. 創(chuàng)建一個基于 mpvue-quickstart 模板的新項目$ vue init mpvue/mpvue-quickstart my-project# 3. 安裝依賴,走你$ cd my-project$ npm install$ npm run dev

復制代碼

未給老項目遷移提供能力憾朴,只能手動遷移代碼狸捕。

學習成本

Mpvue 的文檔在 2018.8.10 后再也沒有更新過,文檔的內(nèi)容較老也比較簡單众雷,其語法糖是 Vue灸拍,為開發(fā)者提供了整體的 Vue 的開發(fā)體驗,對熟悉 Vue 的同學接入成本較低砾省。

一個簡單的 Mpvue 代碼示例:

importcardfrom'@/components/card'exportdefault{? data () {return{motto:'Hello miniprograme',userInfo: {nickName:'mpvue',avatarUrl:'http://mpvue.com/assets/logo.png'? ? ? }? ? }? }}.userinfo {? display: flex;}

復制代碼

2.2.3 Taro

接入成本

給新起項目提供了 cli 能力:

# 使用 npm 安裝 CLI$ npm install -g@tarojs/cli# 使用命令創(chuàng)建模板項目$ taro init myApp

復制代碼

給老的原生小程序項目提供了代碼一鍵轉換的指令:

$ taroconvert

復制代碼

學習成本

Taro 有一個完善的開源文檔鸡岗,詳細的描述了 Taro 的組件、API 支持情況和使用纯蛾、進階指南纤房,Taro 的語法糖是 React纵隔,對熟悉 React 同學來說學習成本很低翻诉。

一個簡單的 Taro 代碼示例:

importTaro, { Component }from"@tarojs/taro";import{ View, Button }from"@tarojs/components";exportdefaultclassIndexextendsComponent{constructor(){super(...arguments);this.state = {title:"首頁",list: [1,2,3]? ? };? }componentDidMount(){}add =e=>{// dosth? }render(){return({this.state.title}? ? );? }}

復制代碼

2.2.4 Uni-app

接入成本

給新起項目提供了兩種生產(chǎn)項目模板方式:

通過 HBuilderX 可視化界面,在點擊工具欄里的文件 -> 新建 -> 項目

通過 vue-cli 命令行:

# 全局安裝vue-cli$ npm install -g@vue/cli# 創(chuàng)建uni-app$ vue create -p dcloudio/uni-preset-vue my-project

復制代碼

給小程序原生捌刮、Wepy碰煌、Mpvue 提供了詳細的遷移步驟文檔。

學習成本

Uni-app 有一個完善的開源文檔绅作,其語法糖是 Vue芦圾,對熟悉 Vue 的同學來說學習成本很低,在開發(fā)工具上官方對 HBuilderX 更友好俄认,對熟悉 HBuilderX 使用的入手成本較低个少。

一個簡單的 Uni-app 代碼示例:

{{title}}exportdefault{data(){return{title:'Hello'? ? ? }? ? }? }? .content {? ? text-align: center;? ? height: 400upx;? }

復制代碼

2.2.5 Chameleon

接入成本

給新起項目提供了 cli 能力:

# 全局安裝cli$ npm i -g chameleon-tool# 初始化項目$ cml init project

復制代碼

給小程序原生、Vue眯杏、Weex 提供了 CML 的遷移指南夜焦。

學習成本

Chameleon 有一個相對完善的開源文檔,其語法糖是類 Vue岂贩,對熟悉 Vue 的同學來說學習成本很低茫经。

一個簡單的 Chameleon 代碼示例:

<!-- 數(shù)據(jù)綁定與計算屬性 -->{{ message }}{{ message2 }}classIndex{? data = {message:'HelloCML',? }}exportdefaultnewIndex().class1 {? color: #f00;}

復制代碼

2.3 項目性能

本文主要研討的應用方向是微信小程序,所以選型的框架需要對微信小程序的兼容性很高、且產(chǎn)出的項目有較高的性能卸伞。多端框架很多都是基于微信小程序的 API 開發(fā)的抹镊,所以對微信小程序的兼容性都很高,下面我們來看一下一個簡單的日歷組件應用到各框架產(chǎn)出的微信小程序性能數(shù)據(jù)對比荤傲。

2.3.1 微信原生

小程序包大锌宥:22.868 字節(jié)

微信基礎庫版本:2.6.2 (以下框架相同)

測試數(shù)據(jù)記錄:

內(nèi)存頁面切換耗時啟動耗時初次渲染耗時再次渲染耗時數(shù)據(jù)緩存

252m146ms1163ms26ms94ms0B

244m606ms1293ms38ms60ms0B

256m159ms1293ms26ms131ms0B

235m708ms1403ms49ms58ms0B

245m571ms1163ms32ms56ms0B

2.3.2 Wepy

小程序包大小:131,957 字節(jié)

Wepy 版本:1.6.0

測試數(shù)據(jù)記錄:

內(nèi)存頁面切換耗時啟動耗時初次渲染耗時再次渲染耗時數(shù)據(jù)緩存

253m436ms1049ms29ms35ms0B

259m542ms1340ms33ms61ms0B

267m466ms1113ms22ms37ms0B

260m447ms1160ms22ms50ms0B

254m459ms1036ms30ms40ms0B

2.3.3 Mpvue

小程序包大衅谩:197,601 字節(jié)

Mpvue 版本:2.0.6

測試數(shù)據(jù)記錄:

內(nèi)存頁面切換耗時啟動耗時初次渲染耗時再次渲染耗時數(shù)據(jù)緩存

225m247ms896ms24ms62ms0B

239m253ms910ms22ms58ms0B

235m446ms1591ms27ms62ms0B

237m269ms979ms21ms60ms0B

243m270ms908ms23ms57ms0B

2.3.4 Taro

小程序包大邪惫健:167,080 字節(jié)

Taro 版本:1.3.2

測試數(shù)據(jù)記錄:

內(nèi)存頁面切換耗時啟動耗時初次渲染耗時再次渲染耗時數(shù)據(jù)緩存

246m231ms718ms16ms224ms0B

241m297ms1007ms19ms246ms0B

246m256ms868ms16ms288ms0B

242m227ms829ms17ms224ms0B

237m231ms869ms17ms229ms0B

2.3.5 Uni-app

小程序包大小:292,831 字節(jié)

Uni-app 版本:2.0.0

測試數(shù)據(jù)記錄:

內(nèi)存頁面切換耗時啟動耗時初次渲染耗時再次渲染耗時數(shù)據(jù)緩存

239m440ms987ms34ms178ms34B

237m529ms1365ms34ms182ms34B

232m531ms1133ms39ms183ms34B

236m487ms1154ms32ms178ms34B

239m486ms1051ms33ms190ms34B

2.3.6 Chameleon

小程序包大屑讼妗:671,702 字節(jié)

Chameleon 版本:1.0.3

測試數(shù)據(jù)記錄:

內(nèi)存頁面切換耗時啟動耗時初次渲染耗時再次渲染耗時數(shù)據(jù)緩存

223m550ms1043ms46ms60ms0B

231m597ms1326ms36ms60ms0B

225m631ms1338ms37ms58ms0B

237m658ms1289ms47ms68ms0B

245m611ms1241ms35ms66ms0B

2.3.7 框架性能 PK (平均值)

包大小

原生 < Wepy < Taro < Mpvue < Uni-app < Chameleon

微信小程序的性能

Taro > Mpvue > Uni-app > Wepy > Chamelon > 未優(yōu)化過的原生代碼

框架使用后比原生的性能更好查蓉,這簡直逆天了,后來研究發(fā)現(xiàn):

微信原生框架耗時主要在 setData 調(diào)用上榜贴,開發(fā)者若不單獨優(yōu)化豌研,則每次都會傳遞大量數(shù)據(jù);而 Uni-app唬党、Taro 等都在調(diào)用 setData 之前自動做 diff 計算鹃共,每次僅傳遞變動的數(shù)據(jù)。

2.4 可維護性

團隊選型框架后驶拱,最擔心的事情就是后期的維護性霜浴。在需求開發(fā)的過程中,發(fā)現(xiàn)框架本身有問題蓝纲,怎么解決阴孟?框架深度使用過程中,突然發(fā)現(xiàn)該框架無人維護了税迷,issue 上提交的問題遲遲沒人跟進了永丝,怎么辦?所以在選型框架中箭养,框架的可維護性是大部分團隊所關注的事情慕嚷。

WepyMpvueTaroUni-appChameleon

Star數(shù)188541860521740124846521

社群無論壇、無交流群毕泌;只能網(wǎng)搜或者提issues無論壇喝检、無交流群;只能網(wǎng)搜或者提issues有論壇撼泛、社區(qū)挠说、交流群等,論壇活躍有論壇坎弯、社區(qū)纺涤、交流群等译暂,論壇活躍,交流群多且回復及時官方文檔提供了微信撩炊、QQ交流群外永、順風公鹿等

語言類Vue的語法糖類Vue的語法糖React的語法糖類Vue的語法糖類Vue的語法糖

開源程度完全開源完全開源完全開源半開源完全開源

從框架現(xiàn)有 star 數(shù)可以看出:Wepy、Mpvue 和 Taro 的開源關注度比較高拧咳,這說明這幾個框架的論壇活躍度更高伯顶,相關問題的解決方法更多。

從社群活躍度可以看出:Wepy 和 Mpvue 已經(jīng)很久沒人維護了骆膝,所以后續(xù)的可維護性較差祭衩,建議使用其他的框架。

從框架停更的后期維護成本來看

Wepy阅签、Mpvue掐暮、Uni-app、Chameleon 都是類 Vue 的語法糖政钟,其遷移成本略低路克;而 Taro 是 React 的語法糖,其遷移成本較高养交;

Wepy精算、Mpvue、Taro碎连、Chameleon 都是完全開源的灰羽,團隊可以根據(jù)自己需求把代碼拷貝出來自己維護;而 Uni-app 是半開源的鱼辙,團隊無法把源代碼拷貝出來廉嚼。

3.總結

通過以上業(yè)務功能的滿足度、接入成本座每、項目性能前鹅、可維護性等多方面對比摘悴,可以看出各個框架在各個方面有不同的優(yōu)缺點峭梳。由于 wepy 和 mpvue 已長期不再維護,不建議團隊選擇蹂喻。團隊可以根據(jù)自己的實際業(yè)務需求和內(nèi)部的技術棧選擇葱椭,React 系的可以選擇 Taro 框架,Vue 系的可以選擇 Uni-app 或者 Chameleo

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末口四,一起剝皮案震驚了整個濱河市孵运,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔓彩,老刑警劉巖治笨,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驳概,死亡現(xiàn)場離奇詭異,居然都是意外死亡旷赖,警方通過查閱死者的電腦和手機顺又,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來等孵,“玉大人稚照,你說我怎么就攤上這事「┟龋” “怎么了果录?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咐熙。 經(jīng)常有香客問我弱恒,道長,這世上最難降的妖魔是什么棋恼? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任斤彼,我火速辦了婚禮,結果婚禮上蘸泻,老公的妹妹穿的比我還像新娘琉苇。我一直安慰自己,他們只是感情好悦施,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布并扇。 她就那樣靜靜地躺著,像睡著了一般抡诞。 火紅的嫁衣襯著肌膚如雪穷蛹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天昼汗,我揣著相機與錄音肴熏,去河邊找鬼。 笑死顷窒,一個胖子當著我的面吹牛蛙吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞋吉,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸦做,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谓着?” 一聲冷哼從身側響起泼诱,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赊锚,沒想到半個月后治筒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉栓,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年耸袜,在試婚紗的時候發(fā)現(xiàn)自己被綠了系瓢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡句灌,死狀恐怖夷陋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胰锌,我是刑警寧澤骗绕,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站资昧,受9級特大地震影響酬土,放射性物質發(fā)生泄漏。R本人自食惡果不足惜格带,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一撤缴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叽唱,春花似錦屈呕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至镶摘,卻和暖如春嗽桩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凄敢。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工碌冶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涝缝。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓扑庞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俊卤。 傳聞我的和親對象是個殘疾皇子嫩挤,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容