日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

收集bug开源框架_划重点 | 小程序框架全面测评

發(fā)布時(shí)間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 收集bug开源框架_划重点 | 小程序框架全面测评 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章來(lái)源 |?凹凸實(shí)驗(yàn)室

最近前端屆多端框架頻出,相信很多有代碼多端運(yùn)行需求的開(kāi)發(fā)者都會(huì)產(chǎn)生一些疑惑:這些框架都有什么優(yōu)缺點(diǎn)?到底應(yīng)該用哪個(gè)?

作為 Taro 開(kāi)發(fā)團(tuán)隊(duì)一員,筆者想在本文盡量站在一個(gè)客觀公正的角度去評(píng)價(jià)各個(gè)框架的選型和優(yōu)劣。但宥于利益相關(guān),本文的觀點(diǎn)很可能是帶有偏向性的,大家可以帶著批判的眼光去看待,權(quán)當(dāng)拋磚引玉。

那么,當(dāng)我們?cè)谟懻摱喽丝蚣軙r(shí),我們?cè)谡務(wù)撌裁?#xff1a;

多端

筆者以為,現(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)有:

  • 開(kāi)發(fā)迅速

  • 復(fù)用前端生態(tài)

  • 易于學(xué)習(xí)上手,不管前端后端移動(dòng)端,多多少少都會(huì)一點(diǎn) JS、CSS

  • 缺點(diǎn)有:

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

  • 由于沒(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é):

    開(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-app、Taro?、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

    多端支持度

    只從支持端的數(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

    組件庫(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

    接入成本

    接入成本有兩個(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

    開(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è)有專門(mén)針對(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)空看提交:

    • chameleon: https://github.com/didi/chameleon

    • mpvue: https://github.com/Meituan-Dianping/mpvue

    • Taro: https://github.com/NervJS/taro

    • uni-app: https://github.com/dcloudio/uni-app

    • WePY: https://github.com/Tencent/wepy

    (按字母順序排序)

    原文鏈接:https://aotu.io/notes/2019/03/12/mini-program-framework-full-review/

    第三屆全球小程序生態(tài)大會(huì)門(mén)票

    總結(jié)

    以上是生活随笔為你收集整理的收集bug开源框架_划重点 | 小程序框架全面测评的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。