目前是每次點擊底部tab都向服務(wù)器獲取一遍購物車列表,哪怕用戶近期沒有加入或者減少購物車行為,每次主觀上故意點擊或者誤點都是無效行為,白白消耗服務(wù)器資源。。。。
我只是做個臆,想假設(shè)有同行搞你。自己搞自己測試了一下,手機(jī)上安裝個點擊軟件,幾十毫秒點一下,反復(fù)點擊底部tab各種頁面跳轉(zhuǎn)各種點擊,就會反復(fù)請求,我測試了一下很快服務(wù)器內(nèi)存和cpu就爆滿了。。。當(dāng)然你可以在服務(wù)器端安裝防火墻防護(hù)
我下面講的只是針對購物車的優(yōu)化(購物車頁,和商品分類的那個購物車組件cartList都適用)
給購物車 定義一個刷新開關(guān) 可以放在全局app里,或者緩存里。。。
①初次打開購物車頁面~onLoad() 獲取最新購物車列表,獲取成功回調(diào)uin.setStorageSync(“cart”,false) 關(guān)閉購物車自動刷新開關(guān)
②后期 每次打開購物車時
show()檢查 如果uni.getStorageSync(“cart”) 為false
則不進(jìn)行購物車刷新操作,不請求服務(wù)器,反復(fù)多次點擊都不進(jìn)行任何操作。節(jié)省服務(wù)器資源
③在組件productWindow,cartList 監(jiān)測到用戶有加購行為,則 uin.setStorageSync(“cart”,true) 開啟購物車刷新開關(guān)
④再次打開購物車列表時
show()檢查,如果uni.getStorageSync(“cart”) 為true 則 刷新獲取一遍最新購物車列表,
成功回調(diào) uin.setStorageSync(“cart”,false) ,關(guān)閉購物車刷新開關(guān)
這樣就實現(xiàn)了 按需要刷新。
還有一點,現(xiàn)在購物車 - + 點擊起來不夠順滑,點快點就很卡頓,影響體驗。雖然函數(shù)節(jié)流防抖可以防止客戶惡意快速點擊,但確實影響體驗。
這方面的優(yōu)化建議
首先每次點擊 - + 操作時 ,
優(yōu)先在本地用戶端實時計算 購物車總數(shù)
that.cartCount++;
wx.setTabBarBadge({index: 2,text: this.count + ''})
和 對應(yīng)的 sku購物車數(shù)量
item.cart_num = Number(item.cart_num) + 1
隨便他怎么點擊使勁點都不請求服務(wù)器,只優(yōu)先本地計算 眼睛看得見的數(shù)據(jù),視覺上感覺非常絲滑 。。。。
然后把 函數(shù)節(jié)流防抖 只針對修改購物車的的請求接口setCartNum上
那個pro版有一些優(yōu)惠規(guī)則
①看看能不能把那個優(yōu)惠規(guī)則也放到本地實時計算,然后500毫秒內(nèi)只執(zhí)行最后一次點擊的時候向服務(wù)器效驗一遍,返回最新數(shù)據(jù)
②如果優(yōu)惠規(guī)則放本地計算行不通的話,
那就點擊 - + 的時候,getTotalPrice實時計算優(yōu)惠前的金額顯示在那里(或者金額那里改成一個計算中的加載動畫),優(yōu)惠后的金額 在節(jié)流函數(shù)Debounce 請求服務(wù)器后 再返回數(shù)據(jù)