wepy
框架的列表性性能比較差,主要緣由是修改列表中任意字段的時候,會給setData
傳遞完整的列表,詳細見這個 issue;
此時修改長列表任意字段,都會致使頁面長時間不響應git
使用字典(
Object
)與長列表進行組合,由於通常狀況下字典的數據量會遠遠小於列表
任意彈窗對購物車
cart
進行修改,產品列表對應的購買數量同步修改
// 數據結構 // 產品列表(長度3000+) var products = [{id: "79", name: "精緻葷菜"}...] // 購物車字典 // key: productId, value: 購物車數據 var cartDict = { 2407: { price: "1.02" num: 2 } }
注意因爲cartDict
數據爲用戶手動添加,數據量遠遠小於列表。那麼setData
時速度也會相應提升github
此時咱們使用組合
方式渲染列表的購買量redux
<view class="num" wx:if="{{ cartDict[product.id] }}">{{cartDict[product.id].num}}</view>
經過將每次修改列表轉移爲每次修改cartDict來達到提高性能的效果;上面那個issue
也能夠用相似思路製做一個展開產品的字典小程序
咱們的商品列表通常會比較長(目前最大有3000+個),此時第一次進入頁面白屏時間很長(10s+);
使用h5的優化思路,相似app。只渲染一部分屏幕內的產品,其餘絕大部分產品使用骨架
展現;使用此方法有一些限制數據結構
白屏
(小程序優化) =>骨架
(咱們的優化)
=> 出現產品
咱們項目全部產品等高,所以比較好計算當前產品是否應該展現。app
首先是模板寫法框架
<repeat for="{{products}}" item="dish" index="index"> <dishItem :dish="dish" wx:if="{{showTypeDict[type.id]}}"></dishItem> <view wx:else> <image src="{{_skeleton}}"></image> </view> </repeat>
說明:性能
showTypeDict
表明當前須要展現的產品字典,使用字典緣由是基於長列表交互問題
監聽scroll,根據當前scrollTop和產品分類的座標來決定showTypeDict
的內容,注意截流;優化
使用以上方法優化後3000+產品白屏時間與100+產品持平。滾動時無卡頓,快速滾動時須要等待一下子產品才能渲染出來;code
以上