相關學習推薦:微信小程式開發教學
多次論證、數月研發,我們重寫部分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) | 新框架 | |
---|---|---|
204ms | 129ms | |
280ms | 139ms | |
341ms | 180ms | |
653ms | 196ms |
以上是uni-app實現微信端效能翻倍的妙招的詳細內容。更多資訊請關注PHP中文網其他相關文章!