无码人妻精一区二区三区,eeuss影院www在线观看,无码精品久久久久久人妻中字,日韩av高清在线看片

推薦新聞
小程序多端框架全面測(cè)評(píng):chameleon、Taro、uni-app、mpvue、WePY
發(fā)布者:深藍(lán)互聯(lián)
發(fā)布時(shí)間:2019-07-25
點(diǎn)擊:次

多端

筆者以為,現(xiàn)在流行的多端框架可以大致分為三類:

1. 全包型

這類框架最大的特點(diǎn)就是從底層的渲染引擎、布局引擎,到中層的 DSL,再到上層的框架全部由自己開(kāi)發(fā),代表框架是 Qt 和 Flutter。這類框架優(yōu)點(diǎn)非常明顯:性能(的上限)高;各平臺(tái)渲染結(jié)果一致。缺點(diǎn)也非常明顯:需要完全重新學(xué)習(xí) DSL(QML/Dart),以及難以適配中國(guó)特色的端:小程序。

這類框架是最原始也是最純正的的多端開(kāi)發(fā)框架,由于底層到上層每個(gè)環(huán)節(jié)都掌握在自己手里,也能最大可能地去保證開(kāi)發(fā)和跨端體驗(yàn)一致。但它們的框架研發(fā)成本巨大,渲染引擎、布局引擎、DSL、上層框架每個(gè)部分都需要大量人力開(kāi)發(fā)維護(hù)。

2. Web 技術(shù)型

這類框架把 Web 技術(shù)(JavaScript,CSS)帶到移動(dòng)開(kāi)發(fā)中,自研布局引擎處理 CSS,使用 JavaScript 寫(xiě)業(yè)務(wù)邏輯,使用流行的前端框架作為 DSL,各端分別使用各自的原生組件渲染。代表框架是 React Native 和 Weex,這樣做的優(yōu)點(diǎn)有:

  1. 開(kāi)發(fā)迅速
  2. 復(fù)用前端生態(tài)
  3. 易于學(xué)習(xí)上手,不管前端后端移動(dòng)端,多多少少都會(huì)一點(diǎn) JS、CSS

缺點(diǎn)有:

  1. 交互復(fù)雜時(shí)難以寫(xiě)出高性能的代碼,這類框架的設(shè)計(jì)就必然導(dǎo)致 JS 和 Native 之間需要通信,類似于手勢(shì)操作這樣頻繁地觸發(fā)通信就很可能使得 UI 無(wú)法在 16ms 內(nèi)及時(shí)繪制。React Native 有一些聲明式的組件可以避免這個(gè)問(wèn)題,但聲明式的寫(xiě)法很難滿足復(fù)雜交互的需求。
  2. 由于沒(méi)有渲染引擎,使用各端的原生組件渲染,相同代碼渲染的一致性沒(méi)有第一種高。

3. JavaScript 編譯型

這類框架就是我們這篇文章的主角們:Taro、WePY 、uni-app 、 mpvue 、 chameleon,它們的原理也都大同小異:先以 JavaScript 作為基礎(chǔ)選定一個(gè) DSL 框架,以這個(gè) DSL 框架為標(biāo)準(zhǔn)在各端分別編譯為不同的代碼,各端分別有一個(gè)運(yùn)行時(shí)框架或兼容組件庫(kù)保證代碼正確運(yùn)行。

這類框架最大優(yōu)點(diǎn)和創(chuàng)造的最大原因就是小程序,因?yàn)榈谝坏诙N框架其實(shí)除了可以跨系統(tǒng)平臺(tái)之外,也都能編譯運(yùn)行在瀏覽器中。(Qt 有 Qt for WebAssembly, Flutter 有 Hummingbird,React Native 有 react-native-web, Weex 原生支持)

另外一個(gè)優(yōu)點(diǎn)是在移動(dòng)端一般會(huì)編譯到 React Native/Weex,所以它們也都擁有 Web 技術(shù)型框架的優(yōu)點(diǎn)。這看起來(lái)很美好,但實(shí)際上 React Native/Weex 的缺點(diǎn)編譯型框架也無(wú)法避免。除此之外,編譯型框架的抽象也不是免費(fèi)的:當(dāng) bug 出現(xiàn)時(shí),問(wèn)題的根源可能出在運(yùn)行時(shí)、編譯時(shí)、組件庫(kù)以及三者依賴的庫(kù)等等各個(gè)方面。在 Taro 開(kāi)源的過(guò)程中,我們就遇到過(guò) Babel 的 bug,React Native 的 bug,JavaScript 引擎的 bug,當(dāng)然也少不了 Taro 本身的 bug。相信其它原理相同的框架也無(wú)法避免這一問(wèn)題。

但這并不意味著這類為了小程序而設(shè)計(jì)的多端框架就都不堪大用。首先現(xiàn)在各巨頭超級(jí) App 的小程序百花齊放,框架會(huì)為了抹平小程序做了許多工作,這些工作在大部分情況下是不需要開(kāi)發(fā)者關(guān)心的。其次是許多業(yè)務(wù)類型并不需要復(fù)雜的邏輯和交互,沒(méi)那么容易觸發(fā)到框架底層依賴的 bug。

那么當(dāng)你的業(yè)務(wù)適合選擇編譯型框架時(shí),在筆者看來(lái)首先要考慮的就是選擇 DSL 的起點(diǎn)。因?yàn)橛卸喽诵枨髽I(yè)務(wù)通常都希望能快速開(kāi)發(fā),一個(gè)能夠快速適應(yīng)團(tuán)隊(duì)開(kāi)發(fā)節(jié)奏的 DSL 就至關(guān)重要。不管是 React 還是 Vue(或者類 Vue)都有它們的優(yōu)缺點(diǎn),大家可以根據(jù)團(tuán)隊(duì)技術(shù)棧和偏好自行選擇。

如果不管什么 DSL 都能接受,那就可以進(jìn)入下一個(gè)環(huán)節(jié):

生態(tài)

以下內(nèi)容均以各框架現(xiàn)在(2019 年 3 月 11 日)已發(fā)布穩(wěn)定版為標(biāo)準(zhǔn)進(jìn)行討論。

1. 開(kāi)發(fā)工具

就開(kāi)發(fā)工具而言 uni-app 應(yīng)該是一騎絕塵,它的文檔內(nèi)容最為翔實(shí)豐富,還自帶了 IDE 圖形化開(kāi)發(fā)工具,鼠標(biāo)點(diǎn)點(diǎn)點(diǎn)就能編譯測(cè)試發(fā)布。

其它的框架都是使用 CLI 命令行工具,但值得注意的是 chameleon 有獨(dú)立的語(yǔ)法檢查工具,Taro 則單獨(dú)寫(xiě)了 ESLint 規(guī)則和規(guī)則集。

在語(yǔ)法支持方面,mpvue、uni-appTaro 、WePY 均支持 TypeScript,四者也都能通過(guò) typing 實(shí)現(xiàn)編輯器自動(dòng)補(bǔ)全。除了 API 補(bǔ)全之外,得益于 TypeScript 對(duì)于 JSX 的良好支持,Taro 也能對(duì)組件進(jìn)行自動(dòng)補(bǔ)全。

CSS 方面,所有框架均支持 SASS、LESS、Stylus,Taro 則多一個(gè) CSS Modules 的支持。

所以這一輪比拼的結(jié)果應(yīng)該是:

uni-app > Taro > chameleon > WePY、mpvue

 

 

2. 多端支持度

只從支持端的數(shù)量來(lái)看,Taro 和 uni-app 以六端略微領(lǐng)先(移動(dòng)端、H5、微信小程序、百度小程序、支付寶小程序、頭條小程序),chameleon 少了頭條小程序緊隨其后。

但值得一提的是 chameleon 有一套自研多態(tài)協(xié)議,編寫(xiě)多端代碼的體驗(yàn)會(huì)好許多,可以說(shuō)是一個(gè)能戳到多端開(kāi)發(fā)痛點(diǎn)的功能。uni-app 則有一套獨(dú)立的條件編譯語(yǔ)法,這套語(yǔ)法能同時(shí)作用于 js、樣式和模板文件。Taro 可以在業(yè)務(wù)邏輯中根據(jù)環(huán)境變量使用條件編譯,也可以直接使用條件編譯文件(類似 React Native 的方式)。

在移動(dòng)端方面,uni-app 基于 weex 定制了一套 nvue 方案 彌補(bǔ) weex API 的不足;Taro則是暫時(shí)基于 expo 達(dá)到同樣的效果;chameleon 在移動(dòng)端則有一套 SDK 配合多端協(xié)議與原生語(yǔ)言通信。

H5 方面,chameleon 同樣是由多態(tài)協(xié)議實(shí)現(xiàn)支持,uni-app 和 Taro 則是都在 H5 實(shí)現(xiàn)了一套兼容的組件庫(kù)和 API。

mpvue 和 WePY 都提供了轉(zhuǎn)換各端小程序的功能,但都沒(méi)有 h5 和移動(dòng)端的支持。

所以最后一輪對(duì)比的結(jié)果是:

chameleon > Taro、uni-app > mpvue > WePY

 

 

3. 組件庫(kù)/工具庫(kù)/demo

作為開(kāi)源時(shí)間最長(zhǎng)的框架,WePY 不管從 Demo,組件庫(kù)數(shù)量 ,工具庫(kù)來(lái)看都占有一定優(yōu)勢(shì)。

uni-app 則有自己的插件市場(chǎng)和 UI 庫(kù),如果算上收費(fèi)的框架和插件比起 WePy 也是完全不遑多讓的。

Taro 也有官方維護(hù)的跨端 UI 庫(kù) taro-ui ,另外在狀態(tài)管理工具上也有非常豐富的選擇(Redux、MobX、dva),但 demo 的數(shù)量不如前兩個(gè)。但 Taro 有一個(gè)轉(zhuǎn)換微信小程序代碼為 Taro 代碼的工具,可以彌補(bǔ)這一問(wèn)題。

而 mpvue 沒(méi)有官方維護(hù)的 UI 庫(kù),chameleon 第三方的 demo 和工具庫(kù)也還基本沒(méi)有。

所以這輪的排序是:

WePY > uni-app 、taro > mpvue > chameleon

 

 

4. 接入成本

接入成本有兩個(gè)方面:

第一是框架接入原有微信小程序生態(tài)。由于目前微信小程序已呈一家獨(dú)大之勢(shì),開(kāi)源的組件和庫(kù)(例如 wxparse、echart、zan-ui 等)多是基于原生微信小程序框架語(yǔ)法寫(xiě)成的。目前看來(lái) uni-app 、Taro、mpvue 均有文檔或 demo 在框架中直接使用原生小程序組件/庫(kù),WePY 由于運(yùn)行機(jī)制的問(wèn)題,很多情況需要小改一下目標(biāo)庫(kù)的源碼,chameleon 則是提供了一個(gè)按步驟大改目標(biāo)庫(kù)源碼的遷移方式。

第二是原有微信小程序項(xiàng)目部分接入框架重構(gòu)。在這個(gè)方面 Taro 在京東購(gòu)物小程序上進(jìn)行了大膽的實(shí)踐,具體可以查看文章《Taro 在京東購(gòu)物小程序上的實(shí)踐》。其它框架則沒(méi)有提到相關(guān)內(nèi)容。

而對(duì)于兩種接入方式 Taro 都提供了 taro convert 功能,既可以將原有微信小程序項(xiàng)目轉(zhuǎn)換為 Taro 多端代碼,也可以將微信小程序生態(tài)的組件轉(zhuǎn)換為 Taro 組件。

所以這輪的排序是:

Taro > mpvue 、 uni-app > WePY > chameleon

流行度

從 GitHub 的 star 來(lái)看,mpvue 、Taro、WePY 的差距非常小。從 NPM 和 CNPM 的 CLI 工具下載量來(lái)看,是 Taro(3k/week)> mpvue (2k/w) > WePY (1k/w)。但發(fā)布時(shí)間也剛好反過(guò)來(lái)。筆者估計(jì)三家的流行程度和案例都差不太多。

uni-app 則號(hào)稱有上萬(wàn)案例,但不像其它框架一樣有一些大廠應(yīng)用案例。另外從開(kāi)發(fā)者的數(shù)量來(lái)看也是 uni-app 領(lǐng)先,它擁有 20+ 個(gè) QQ 交流群(最大人數(shù) 2000)。

所以從流行程度來(lái)看應(yīng)該是:

uni-app > Taro、WePY、mpvue > chameleon

 

5. 開(kāi)源建設(shè)

一個(gè)開(kāi)源作品能走多遠(yuǎn)是由框架維護(hù)團(tuán)隊(duì)和第三方開(kāi)發(fā)者共同決定的。雖然開(kāi)源建設(shè)不能具體地量化,但依然是衡量一個(gè)框架/庫(kù)生命力的非常重要的標(biāo)準(zhǔn)。

從第三方貢獻(xiàn)者數(shù)量來(lái)看,Taro 在這一方面領(lǐng)先,并且 Taro 的一些核心包/功能(MobX、CSS Modules、alias)也是由第三方開(kāi)發(fā)者貢獻(xiàn)的。除此之外,騰訊開(kāi)源的 omi 框架小程序部分也是基于 Taro 完成的。

WePY 在騰訊開(kāi)源計(jì)劃的加持下在這一方面也有不錯(cuò)的表現(xiàn);mpvue 由于停滯開(kāi)發(fā)了很久就比較落后了;可能是產(chǎn)品策略的原因,uni-app 在開(kāi)源建設(shè)上并不熱心,甚至有些部分代碼都沒(méi)有開(kāi)源;chameleon 剛剛開(kāi)源不久,但它的代碼和測(cè)試用例都非常規(guī)范,以后或許會(huì)有不錯(cuò)的表現(xiàn)。

那么這一輪的對(duì)比結(jié)果是:

Taro > WePY > mpvue > chameleon > uni-app

最后補(bǔ)一個(gè)總的生態(tài)對(duì)比圖表:

 

未來(lái)

從各框架已經(jīng)公布的規(guī)劃來(lái)看:

WePY 已經(jīng)發(fā)布了 v2.0.alpha 版本,雖然沒(méi)有公開(kāi)的文檔可以查閱到 2.0 版本有什么新功能/特性,但據(jù)其作者介紹,WePY 2.0 會(huì)放大招,是一個(gè)「對(duì)得起開(kāi)發(fā)者」的版本。筆者也非常期待 2.0 正式發(fā)布后 WePY 的表現(xiàn)。

mpvue 已經(jīng)發(fā)布了 2.0 的版本,主要是更新了其它端小程序的支持。但從代碼提交, issue 的回復(fù)/解決率來(lái)看,mpvue 要想在未來(lái)有作為首先要打消社區(qū)對(duì)于 mpvue不管不顧不更新的質(zhì)疑。

uni-app 已經(jīng)在生態(tài)上建設(shè)得很好了,應(yīng)該會(huì)在此基礎(chǔ)之上繼續(xù)穩(wěn)步發(fā)展。如果 uni-app 能加強(qiáng)開(kāi)源開(kāi)放,再加強(qiáng)與大廠的合作,相信未來(lái)還能更上一層樓。

chameleon 的規(guī)劃比較宏大,雖然是最后發(fā)的框架,但已經(jīng)在規(guī)劃或正在實(shí)現(xiàn)的功能有:

  • 快應(yīng)用和端拓展協(xié)議
  • 通用組件庫(kù)和垂直類組件庫(kù)
  • 面向研發(fā)的圖形化開(kāi)發(fā)工具
  • 面向非研發(fā)的圖形化頁(yè)面搭建工具

如果 chameleon 把這些功能都做出來(lái)的話,再繼續(xù)完善生態(tài),爭(zhēng)取更多第三方開(kāi)發(fā)者,那么在未來(lái) chameleon 將大有可為。

Taro 的未來(lái)也一樣值得憧憬。Taro 即將要發(fā)布的 1.3 版本就會(huì)支持以下功能:

  • 快應(yīng)用支持
  • Taro Doctor,自動(dòng)化檢查項(xiàng)目配置和代碼合法性
  • 更多的 JSX 語(yǔ)法支持,1.3 之后限制生產(chǎn)力的語(yǔ)法只有 只能用 map 創(chuàng)造循環(huán)組件 一條
  • H5 打包體積大幅精簡(jiǎn)

同時(shí) Taro 也正在對(duì)移動(dòng)端進(jìn)行大規(guī)模重構(gòu);開(kāi)發(fā)圖形化開(kāi)發(fā)工具;開(kāi)發(fā)組件/物料平臺(tái)以及圖形化頁(yè)面搭建工具。

結(jié)語(yǔ)

那說(shuō)了那么多,到底用哪個(gè)呢?

如果不介意嘗鮮和學(xué)習(xí) DSL 的話,完全可以嘗試 WePY 2.0 和 chameleon ,一個(gè)是醞釀了很久的 2.0 全新升級(jí),一個(gè)有專門針對(duì)多端開(kāi)發(fā)的多態(tài)協(xié)議。

uni-app 和 Taro 相比起來(lái)就更像是「水桶型」框架,從工具、UI 庫(kù),開(kāi)發(fā)體驗(yàn)、多端支持等各方面來(lái)看都沒(méi)有明顯的短板。而 mpvue 由于開(kāi)發(fā)一度停滯,現(xiàn)在看來(lái)各個(gè)方面都不如在小程序端基于它的 uni-app 。

當(dāng)然,Talk is cheap。如果對(duì)這個(gè)話題有更多興趣的同學(xué)可以去 GitHub 另行研究,有空看代碼,沒(méi)空看提交:

(按字母順序排序)

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應(yīng)用實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了10億+錯(cuò)誤事件,付費(fèi)客戶有Google、360、金山軟件、百姓網(wǎng)等眾多品牌企業(yè)。歡迎大家免費(fèi)試用!

 

關(guān)注深藍(lán)互聯(lián)公眾號(hào)
Copyright ? 2013-2025 深藍(lán)互聯(lián) 版權(quán)所有
友情鏈接: