為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2019-11 文章編輯:小燈 瀏覽次數(shù):4352
出于多端投放和開放生態(tài)的考慮,閑魚開始接入整個(gè)阿里小程序體系。閑魚在9月份迅速上線了第一個(gè)小程序魚塘小程序,由于剛接觸不熟悉小程序體系,整體性能上有比較大的優(yōu)化空間,主要表現(xiàn)在以下問題:
在分析具體優(yōu)化 Case 之前我們先看下小程序架構(gòu),先要了解架構(gòu)才能清楚如何去優(yōu)化具體的業(yè)務(wù)代碼。阿里小程序采用支付寶小程序的架構(gòu),這里引用一張支付寶小程序頁面生命周期圖。
目前市場(chǎng)上所有小程序都采用邏輯(worker)和渲染(webview)分離的方式。這樣帶來的好處是:
但是這樣也會(huì)造成一個(gè)顯而易見的問題,頁面性能強(qiáng)依賴 webview 和 worker 的通信效率:
小程序邏輯和渲染分離的架構(gòu)造成它與傳統(tǒng) H5 性能優(yōu)化方式上的一些差異。小程序性能優(yōu)化可以參考看下官方推薦的一些性能優(yōu)化建議,簡(jiǎn)單來講需要特別注意 setData 操作的頻次和傳輸數(shù)據(jù),接下來我們結(jié)合魚塘小程序具體案例一塊探討下。
魚塘小程序是一個(gè)類似興趣圈子下的內(nèi)容聚合場(chǎng)景,用戶在這里可以無限加載瀏覽內(nèi)容,還會(huì)點(diǎn)擊 Tab 切換瀏覽不同維度的內(nèi)容。我們需要重點(diǎn)考慮小程序加載流暢度、滾動(dòng)順滑度以及 Tab 點(diǎn)擊切換時(shí)候界面響應(yīng)速度。之前版本的魚塘小程序在低端 Android 機(jī)(Android vivo Y67)上首屏?xí)r間接近6s,在 iPhone 7P 上滾動(dòng)幀率平均在 34fps - 60fps,點(diǎn)擊 Tab 切換瞬時(shí)幀率在 30fps 左右,下面針對(duì)幾個(gè)具體 Case 討論解決方案。
『BEFORE』
『AFTER』
從打開小程序到最終渲染出來經(jīng)歷了短暫的白屏
加載整體耗時(shí)包括小程序容器初始化、數(shù)據(jù)請(qǐng)求以及請(qǐng)求結(jié)果返回到渲染,需要針對(duì)每個(gè)時(shí)期做優(yōu)化
『BEFORE』
『AFTER』
頁面滾動(dòng)掉幀感明顯,粘手度低
針對(duì)小程序 webview 和 worker 通信的機(jī)制,我們需要減少 setData 的調(diào)用頻率與傳輸數(shù)據(jù)大小。
『BEFORE』
『AFTER』
加載幾頁 Feeds 后,切換 Tab 開始出現(xiàn)明顯卡頓,需等待 3-5 秒,部分 Android 機(jī)器上更為嚴(yán)重,偶爾會(huì) Crash
Tab 切換時(shí)在短時(shí)間內(nèi)做了太多事情:切換 Tab Current 狀態(tài)、銷毀 Feeds 列表、展示 Loading 動(dòng)畫、發(fā)起數(shù)據(jù)請(qǐng)求 -> 渲染新列表,這樣高并發(fā)大面積的內(nèi)容更新導(dǎo)致小程序視圖層數(shù)據(jù)消費(fèi)阻塞,從而產(chǎn)生卡頓感。
將 Tab 切換時(shí)的任務(wù)拆解開,分四個(gè)階段進(jìn)行:
小程序容器通過離線緩存、數(shù)據(jù)預(yù)加載、小程序?;畹葯C(jī)制來優(yōu)化整體性能。然而在富交互場(chǎng)景中,webview 上的控件渲染會(huì)遇到很多性能瓶頸,目前阿里小程序支持在 webview 中內(nèi)嵌 native 組件來提升整體性能,魚塘小程序中有大量視頻內(nèi)容場(chǎng)景,使用的 video 組件就是 native 原生組件。這類組件脫離 webview 線程之外渲染,但是由于是覆蓋在 webview 之上,所以在 webview 內(nèi)無論怎樣修改 z-index 都無法將元素覆蓋在原生組件之上。
為了解決這個(gè)問題,小程序框架同學(xué)又設(shè)計(jì)了 cover-view ,它可以覆蓋在 native 組件之上,比如視頻上方的播放按鈕就可以用 cover-view 蓋上去。最終線上魚塘小程序通過同層渲染 video 組件之后用戶側(cè)體驗(yàn)有比較大的提升。
經(jīng)過優(yōu)化之后,目前線上魚塘小程序相比之前版本有顯著提升:
針對(duì)這個(gè)業(yè)務(wù)場(chǎng)景下的小程序依然有很多可以繼續(xù)優(yōu)化空間,例如我們將每個(gè)魚塘實(shí)例化獨(dú)自小程序,這樣可以針對(duì)每個(gè)魚塘小程序去進(jìn)行?;畹取4送庠谛〕绦蛐阅軆?yōu)化相關(guān)上,我們認(rèn)為可以在研發(fā)階段提供一個(gè)包含性能告警的容器,通過監(jiān)聽 setData 的調(diào)用頻率與傳輸數(shù)據(jù)大小,對(duì)開發(fā)者一些可能會(huì)影響性能的代碼寫法進(jìn)行提示。未來我們會(huì)持續(xù)在閑魚小程序生態(tài)建設(shè)上發(fā)力,整合集團(tuán)研發(fā)資源建立閑魚小程序研發(fā)全鏈路最佳實(shí)踐,提供外部服務(wù)商入駐開發(fā)三方小程序的良好體驗(yàn)。
iPhone 11 Pro、衛(wèi)衣、T恤等你來抽,馬上來試試手氣 https://www.aliyun.com/1111/2...
本文作者:閑魚技術(shù)-頌晨、玉縝
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
日期:2019-11 瀏覽次數(shù):5524
日期:2019-11 瀏覽次數(shù):11982
日期:2019-11 瀏覽次數(shù):4351
日期:2019-11 瀏覽次數(shù):5385
日期:2019-11 瀏覽次數(shù):5260
日期:2019-11 瀏覽次數(shù):7180
日期:2019-11 瀏覽次數(shù):5165
日期:2019-11 瀏覽次數(shù):15768
日期:2019-11 瀏覽次數(shù):4718
日期:2019-11 瀏覽次數(shù):6517
日期:2019-11 瀏覽次數(shù):5371
日期:2019-11 瀏覽次數(shù):4564
日期:2019-11 瀏覽次數(shù):10763
日期:2019-11 瀏覽次數(shù):8320
日期:2019-11 瀏覽次數(shù):5079
日期:2019-11 瀏覽次數(shù):4311
日期:2019-11 瀏覽次數(shù):8952
日期:2019-11 瀏覽次數(shù):4648
日期:2019-11 瀏覽次數(shù):4845
日期:2019-11 瀏覽次數(shù):4865
日期:2019-11 瀏覽次數(shù):4477
日期:2019-11 瀏覽次數(shù):5026
日期:2019-11 瀏覽次數(shù):10282
日期:2019-11 瀏覽次數(shù):5459
日期:2019-11 瀏覽次數(shù):5437
日期:2019-11 瀏覽次數(shù):4884
日期:2019-11 瀏覽次數(shù):12330
日期:2019-11 瀏覽次數(shù):7354
日期:2019-11 瀏覽次數(shù):7904
日期:2019-11 瀏覽次數(shù):4857
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.