目前是每次点击底部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 请求服务器后 再返回数据
{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}
作者 管理员 企业
{{itemf.name}}
{{itemc.user_info.nickname}}
{{itemc.user_name}}
回复 {{itemc.comment_user_info.nickname}}
{{itemf.name}}