uniapp項目優(yōu)化方式及建議
1.復雜頁面數(shù)據(jù)區(qū)域封裝成組件
場景:
例如項目里包含類似論壇頁面:點擊一個點贊圖標,贊數(shù)要立即+1,會引發(fā)頁面級所有的數(shù)據(jù)從js層向視圖層的同步,造成整個頁面的數(shù)據(jù)更新,造成點擊延遲卡頓
優(yōu)化方案:
對于復雜頁面,更新某個區(qū)域的數(shù)據(jù)時,需要把這個區(qū)域做成組件,這樣更新數(shù)據(jù)時就只更新這個組件
注:app-nvue和h5不存在此問題;造成差異的原因是小程序目前只提供了組件差量更新的機制,不能自動計算所有頁面差量
2.避免使用大圖
場景:
頁面中若大量使用大圖資源,會造成頁面切換的卡頓,導致系統(tǒng)內(nèi)存升高,甚至白屏崩潰;對大體積的二進制文件進行 base64 ,也非常耗費資源
優(yōu)化方案:
圖片請壓縮后使用,避免大圖,必要時可以考慮雪碧圖或svg,簡單代碼能實現(xiàn)的就不要圖片
3.小程序、APP分包處理pages過多
4.圖片懶加載
功能描述:
此功能只對微信小程序、App、百度小程序、字節(jié)跳動小程序有效,默認開啟
前往uView手冊查看配置
5.禁止濫用本地存儲
不要濫用本地存儲,局部頁面之間的傳參用url,如果用本地存儲傳遞數(shù)據(jù)要命名規(guī)范和按需銷毀
6.可在外部定義變量
在 uni-app 中,定義在 data 里面的數(shù)據(jù)每次變化時都會通知視圖層重新渲染頁面;所以如果不是視圖所需要的變量,可以不定義在 data 中,可在外部定義變量或直接掛載在 vue實例 上,以避免造成資源浪費
7.分批加載數(shù)據(jù)優(yōu)化頁面渲染
場景:
頁面初始化時,邏輯層一次性向視圖層傳遞很大的數(shù)據(jù),使視圖層一次性渲染大量節(jié)點,可能造成通訊變慢、頁面切換卡頓
優(yōu)化方案:
以局部更新頁面的方式渲染頁面;如:服務端返回 100條數(shù)據(jù) ,可進行分批加載,一次加載 50條 , 500ms 后進行下一次加載
8.避免視圖層和邏輯層頻繁進行通訊
- 減少 scroll-view 組件的 scroll 事件監(jiān)聽,當監(jiān)聽 scroll-view 的滾動事件時,視圖層會頻繁的向邏輯層發(fā)送數(shù)據(jù)
- 監(jiān)聽 scroll-view 組件的滾動事件時,不要實時的改變 scroll-top / scroll-left 屬性,因為監(jiān)聽滾動時,視圖層向邏輯層通訊,改變 scroll-top / scroll-left 時,邏輯層又向視圖層通訊,這樣就可能造成通訊卡頓
- 注意 onPageScroll 的使用, onPageScroll 進行監(jiān)聽時,視圖層會頻繁的向邏輯層發(fā)送數(shù)據(jù)
- 多使用 css動畫 ,而不是通過js的定時器操作界面做動畫
- 如需在 canvas 里做跟手操作, app端 建議使用 renderjs ,小程序端建議使用 web-view 組件; web-view 里的頁面沒有邏輯層和視圖層分離的概念,自然也不會有通信折損
9.CSS優(yōu)化
要知道哪些屬性是有繼承效果的,像字體、字體顏色、文字大小都是繼承的,禁止沒有意義的重復代碼
10.善用節(jié)流和防抖
防抖:
等待n秒后執(zhí)行某函數(shù),若等待期間再次被觸發(fā),則等待時間重新初始化
節(jié)流:
觸發(fā)事件n秒內(nèi)只執(zhí)行一次,n秒未過,再次觸發(fā)無效
11.優(yōu)化頁面切換動畫
場景:
頁面初始化時存在大量圖片或原生組件渲染和大量數(shù)據(jù)通訊,會發(fā)生新頁面渲染和窗體進入動畫搶資源,造成頁面切換卡頓、掉幀
優(yōu)化方案:
- 建議延時 100ms~300ms 渲染圖片或復雜原生組件,分批進行數(shù)據(jù)通訊,以減少一次性渲染的節(jié)點數(shù)量
- App 端動畫效果可以自定義; popin/popout 的雙窗體聯(lián)動擠壓動畫效果對資源的消耗更大,如果動畫期間頁面里在執(zhí)行耗時的js,可能會造成動畫掉幀;此時可以使用消耗資源更小的動畫效果,比如 slide-in-right / slide-out-right
- App-nvue 和 H5 ,還支持頁面預載,uni.preloadPage,可以提供更好的使用體驗
12.優(yōu)化背景色閃白
場景:
進入新頁面時背景閃白,如果頁面背景是深色,在vue頁面中可能會發(fā)生新窗體剛開始動畫時是灰白色背景,動畫結(jié)束時才變?yōu)樯钌尘?,造成閃屏
優(yōu)化方案:
將樣式寫在 App.vue 里,可以加速頁面樣式渲染速度; App.vue 里面的樣式是全局樣式,每次新開頁面會優(yōu)先加載 App.vue 里面的樣式,然后加載普通 vue 頁面的樣式
app端 還可以在 pages.json 的頁面的 style 里單獨配置頁面原生背景色,比如在 globalStyle->style->app-plus->background 下配置全局背景色
"style": { "app-plus": { "background":"#000000" } }
nvue頁面不存在此問題,也可以更改為nvue頁面
13.優(yōu)化啟動速度
- 工程代碼越多,包括背景圖和本地字體文件越大,對小程序啟動速度有影響,應注意控制體積
- App端的 splash 關閉有白屏檢測機制,如果首頁一直白屏或首頁本身就是一個空的中轉(zhuǎn)頁面,可能會造成 splash 10秒才關閉
- App端使用v3編譯器,首頁為 nvue頁面 時,并設置為fast啟動模式,此時App啟動速度最快
App設置為純 nvue項目 (manifest里設置app-plus下的renderer:"native"),這種項目的啟動速度更快,2秒即可完成啟動;因為它整個應用都使用原生渲染,不加載基于webview的那套框架
14.優(yōu)化包體積
- uni-app 發(fā)行到小程序時,如果使用了 es6 轉(zhuǎn) es5 、css 對齊的功能,可能會增大代碼體積,可以配置這些編譯功能是否開啟
- uni-app 的 H5端,uni-app 提供了搖樹優(yōu)化機制,未搖樹優(yōu)化前的 uni-app 整體包體積約 500k,服務器部署 gzip 后162k。開啟搖樹優(yōu)化需在manifest配置
- uni-app 的 App端,Android 基礎引擎約 9M ,App 還提供了擴展模塊,比如地圖、藍牙等,打包時如不需要這些模塊,可以裁剪掉,以縮小發(fā)行包;體積在 manifest.json-App 模塊權(quán)限里可以選擇
- App端支持如果選擇純nvue項目 (manifest里設置app-plus下的renderer:"native"),包體積可以進一步減少2M左右
- App端在 HBuilderX 2.7 后,App 端下掉了 非v3 的編譯模式,包體積下降了3M
15.禁止濫用外部js插件
描述:
有官方API的就不要額外引用js插件增加項目體積
例如:
url傳參加密直接用 encodeURIComponent() 和 decodeURIComponent()
到此這篇關于uniapp項目優(yōu)化方式及建議的文章就介紹到這了,更多相關uniapp項目優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
javascript 對象屬性property與元素屬性attribute的瀏覽器支持
對象屬性property與元素屬性attribute的瀏覽器支持情況,大家可以參考下。2010-10-10