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