接口防抖

89 阅读2分钟

接口防抖策略

一是防用户手抖,二是防网络抖动。
哪一类接口需要防抖?

  • 用户输入类接口:比如搜索框输入、表单输入等,用户输入往往会频繁触发接口请求,但是每次触发并不一定需要立即发送请求,可以等待用户完成输入一段时间后再发送请求。

  • 按钮点击类接口:比如提交表单、保存设置等,用户可能会频繁点击按钮,但是每次点击并不一定需要立即发送请求,可以等待用户停止点击一段时间后再发送请求。

  • 滚动加载类接口:比如下拉刷新、上拉加载更多等,用户可能在滚动过程中频繁触发接口请求,但是每次触发并不一定需要立即发送请求,可以等待用户停止滚动一段时间后再发送请求。

如何确定接口是重复的?

防抖也即防重复提交,那么如何确定两次接口就是重复的呢?首先,我们需要给这两次接口的调用加一个时间间隔,大于这个时间间隔的一定不是重复提交;其次,两次请求提交的参数比对,不一定要全部参数,选择标识性强的参数即可;最后,如果想做的更好一点,还可以加一个请求地址的对比。

分布式部署下如何做接口防抖?(有以下两个方案)
  • 使用共享缓存
    开始 -> 用户提交请求 -> 根据上下文和参数生成key -> 将key和参数存入缓存,并设置失效时间 -> 第二次请求过来,同样逻辑生成key -> 判断缓存中当前 -> key是否存在 -> key存在 -> 重复请求,提示“您点击的太快啦” -> key不存在 -> 两次不同的请求,放过 -> 结束
  • 使用分布式锁
    开始 -> 用户提交请求 -> 根据上下文和参数生成key -> 使用key生成一个锁,并对锁设置过期时间 -> 第二次请求过来,同样逻辑生成key -> 尝试去获取锁 -> 没有拿到锁 -> 重复请求,提示“您点击的太快啦" -> 拿到了锁 -> 两次不同的请求,放 -> 结束