搜尋
首頁web前端uni-appuni-app實現微信端效能翻倍的妙招

uni-app實現微信端效能翻倍的妙招

相關學習推薦:微信小程式開發教學

多次論證、數月研發,我們重寫部分Vue底層、重構uni-app框架,實現了微信端效能翻倍及更多Vue語法支持。

背景

uni-app在初期借鑒了mpvue,實現了微信小程式端的快速相容,感謝美團點評團隊對於開源社區的貢獻!

隨著使用uni-app的開發者愈來愈多,業務複雜度不斷增加,不少開發者抱怨uni-app支援的vue語法少,某些場景效能有問題(特別是頁面存在複雜元件的情況),這些問題其實是由mpvue的實作機制導致的,我們以複雜元件的效能問題為例簡要說明。

mpvue/wepy 等框架誕生之初,微信小程式尚不支援自訂元件,無法進行元件化開發;mpvue/wepy 為解決這個問題,創造性的將使用者編寫的Vue元件,編譯為WXML中的模板(template),這樣變相實現了組件化開發能力,提高程式碼多用性,這在當時的技術條件下是很棒的技術方案。但如此方案,也導致Vue組件中的數據會被編譯為Page中的數據,對組件進行數據更新也會基於路徑映射調用Page.setData。特別是元件較多、資料量交大的頁面中,每個元件的局部更新會引發頁面層級的全域更新,產生極大的效能開銷。

微信後來推出的自訂元件,其實支援元件層級的局部更新,經驗證,我們發現元件層級的資料更新,相較於頁面全域更新,有大幅效能提升。

另外,mpvue在Vue層進行的vnode比較及資料diff計算不徹底,也會消耗部分效能。

基於這些原因,我們開始了微信端的框架重寫工作。

新版特性

效能翻倍

新版uni-app 調整重寫了部分Vue.js底層實現,主要包括:

  • 基於小程式自訂元件實作Vue.js 的元件化開發
  • Vue層取消 vnode對比
  • 更徹底的diff計算,setData()通訊資料量更少

新框架重寫之後,我們建構瞭如下測試模型:

  • 建構一個列表介面,每個列表項目為一個自訂元件
  • 上拉載入觸發資料更新,每次從本地讀取靜態數據,屏蔽網路差異
  • 觸發數據更新計時開始,頁面渲染完畢計時結束,求其時間差作為對比指標(耗時,單位為毫秒)

然後分別使用新、舊框架,在同一台手機(vivo nex)上進行多次測試,求其平均值,取得以下結果:

##元件數量舊框架(mpvue)新框架#200204ms129ms400280ms139ms800341ms180ms1000653ms196ms##

從測試資料來看,新框架在複雜頁面下,效能有翻倍提升!特別是資料越多、元件越複雜的頁面,效能提升越大!

Tips:我們也針對目前主流的幾個跨端框架(例如:taro、wepy、chameleon等),全部做了一遍性能測試,uni-app的跑分結果同樣搶眼,近期會將測試程式碼、測試結果公開,接受大家評判,敬請期待。

更多Vue 語法支援

我們同時增強了uni-app編譯器,支援了更多Vue 語法,詳細如下:

  • 支援過濾器filter
  • 支援比較複雜的JavaScript 渲染表達式
  • 支援在template內使用methods 中的函數
  • 支援v-html(同rich-text 的解析)
  • 元件支持原生事件綁定,如:@tap.native

體驗方式

目前新框架在微信端已完成開發,其他小程式和App的編譯器仍為舊版。我們放出群測版,邀請開發者在微信端搶鮮體驗。

開發者依照以下方式建立vue-cli並建立uni-app項目,編譯發行到微信小程式:

# npm script# 全局安装vue-cli$ npm install -g @vue/cli# 创建uni-app项目,会提示选择项目模板,初次接触建议选择 hello uni-app 模板$ vue create -p dcloudio/uni-preset-vue my-project# 进入项目目录$ cd my-project# dev 模式,编译预览$ npm run dev:mp-weixin# build 模式,发行打包$ npm run build:mp-weixin复制代码

新舊版本切換

為了不影響舊項目,uni-app群測版目前同時內建新、老兩個框架,且預設使用舊框架,開發者可透過設定 manifest.json -> mp-weixin -> usingComponents節點啟用新編譯框架,如下:

// manifest.json
{
	// ...
	/* 小程序特有相关 */
	"mp-weixin": {
		"usingComponents":true //启用新框架编译,默认为false
	}
}复制代码

如果你使用了新增的vue語法,請注意只有H5和微信支援這些新語法,編譯到其他平台時,請用條件編譯處理。

Tips:

  • 為確保自訂元件相容性,執行至微信開發者工具時,建議將微信基礎函式庫設定為最新版本。
  • 體驗新框架時,有任何問題或建議,歡迎到github提交issue

#現況與未來

春節過後,uni-app1.6版本發布,新增位元組跳動小程式平台支援;至此,實作一套程式碼、7端發布! 7端分別包含:App(iOS/Android)、小程式(微信/支付寶/百度/位元組跳動)、H5平台,請見下圖:

uni-app實現微信端效能翻倍的妙招

大量開發者熱情湧入uni-app 社區,目前已有數十個uni-app交流群,下圖為一個500人的QQ交流群,創建2天即滿群,開發者的熱情可見一斑。

uni-app實現微信端效能翻倍的妙招

uni-app實現微信端效能翻倍的妙招

目前,每天新建立的uni-app專案(包含測試專案)達數千個,案例過萬,部分案例見uniapp.dcloud.io/case。與Taro等框架清一色微信小程式案例相比,uni-app跨端案例要豐富很多。

在小程式跨端框架中,uni-app也許是使用人數最多、跨端案例最豐富的前端框架。

近期,為活躍Vue多端開發生態,由uni-appmpvue團隊共同舉辦的插件開發大賽正式開始了!歡迎各位開發者踴躍參與,製造輪子、造福社區的同時,順手再拿個獎品(iphone Xs Max、4K顯示器等獎品多多),一舉多得^_^,點擊了解詳情。

接下來,uni-app團隊將繼續全力奔跑,在如下方面快速完善:

  • uni-app新框架相容於其它平台
  • uni-ui 跨端UI函式庫精緻化
  • App端引入更多原生渲染,提升係能體驗
  • 週邊生態進一步完善,例如產業範本、跨端統計等

“為開發者而生”,不是口號,而是定位。

uni-app團隊將一如既往的為開發者解決開發痛點、提升開發效率!

以了解更多其他精品文章,請關注uni-app專欄~

以上是uni-app實現微信端效能翻倍的妙招的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:juejin。如有侵權,請聯絡admin@php.cn刪除
VSCode中如何开发uni-app?(教程分享)VSCode中如何开发uni-app?(教程分享)May 13, 2022 pm 08:11 PM

VSCode中如何开发uni-app?下面本篇文章给大家分享一下VSCode中开发uni-app的教程,这可能是最好、最详细的教程了。快来看看!

利用uniapp开发一个简单的地图导航利用uniapp开发一个简单的地图导航Jun 09, 2022 pm 07:46 PM

怎么利用uniapp开发一个简单的地图导航?本篇文章就来为大家提供一个制作简单地图的思路,希望对大家有所帮助!

聊聊如何利用uniapp开发一个贪吃蛇小游戏!聊聊如何利用uniapp开发一个贪吃蛇小游戏!May 20, 2022 pm 07:56 PM

如何利用uniapp开发一个贪吃蛇小游戏?下面本篇文章就手把手带大家在uniapp中实现贪吃蛇小游戏,希望对大家有所帮助!

uni-app vue3接口请求怎么封装uni-app vue3接口请求怎么封装May 11, 2023 pm 07:28 PM

uni-app接口,全局方法封装1.在根目录创建一个api文件,在api文件夹中创建api.js,baseUrl.js和http.js文件2.baseUrl.js文件代码exportdefault"https://XXXX.test03.qcw800.com/api/"3.http.js文件代码exportfunctionhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

实例讲解uniapp实现多选框的全选功能实例讲解uniapp实现多选框的全选功能Jun 22, 2022 am 11:57 AM

本篇文章给大家带来了关于uniapp的相关知识,其中主要整理了实现多选框的全选功能的相关问题,无法实现全选的原因是动态修改checkbox的checked字段时,界面上的状态能够实时变化,但是无法触发checkbox-group的change事件,下面一起来看一下,希望对大家有帮助。

手把手带你开发一个uni-app日历插件(并发布)手把手带你开发一个uni-app日历插件(并发布)Jun 30, 2022 pm 08:13 PM

本篇文章手把手带大家开发一个uni-app日历插件,介绍下一款日历插件是如何从开发到发布的,希望对大家有所帮助!

实例详解uniapp如何实现电话录音功能(附代码)实例详解uniapp如何实现电话录音功能(附代码)Jan 05, 2023 pm 04:41 PM

本篇文章给大家带来了关于uniapp的相关知识,其中主要介绍了怎么用uniapp实现拨打电话并且还能同步录音的功能,感兴趣的朋友一起来看一下吧,希望对大家有帮助。

聊聊使用Uniapp怎么实现全局消息提示及其组件聊聊使用Uniapp怎么实现全局消息提示及其组件Jun 22, 2022 pm 06:24 PM

Uniapp中怎么实现全局消息提示及其组件?下面本篇文章给大家介绍一下Uniapp全局消息提示及其组件的实现方法,希望对大家有所帮助!

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),