如何预防用户持续点击按钮导致高频度发生同一个 http 请求

2014-11-12 09:54:51 +08:00
 Registering
场景:
android,社交工具
同个界面中存在两个fragmentA和B,A中列出登陆用户加入的群组,每次用户能从A中选择一个群组,B中列出在A中选择查看的群组的成员列表。

在A中点击某个群组之后,在B中列出该群组的成员列表时,每次都是从服务器端重新请求吗?那么如果在左侧,用户不停重复点击按钮,则重复的http请求在一直进行,这样问题大吗

但是觉得每次发送http请求也有理,毕竟群组成员可能随时有新成员加入,或者旧成员更新头像昵称等。

或者通过轮询,但是群组发生变更的检测场景过于繁杂。
3230 次点击
所在节点    程序员
15 条回复
abelyao
2014-11-12 09:57:44 +08:00
1、缓存;
2、点击之后,直到数据加载完成之前,都把按钮的点击事件禁用了;
3、可以网络抓包看看到底有没有走数据;
Registering
2014-11-12 10:09:27 +08:00
@abelyao
1,缓存
所有和图片相关的数据本地都适用缓存了
2,数据加载完成之前,禁用按钮,
谢谢提醒,这个很容易解决
3,网络抓包
这个不大懂,目前只知道轮询检测是否有数据更新(比如没20秒钟给服务器发一个轮询请求,检查是否有新数据)
linKnowEasy
2014-11-12 10:12:54 +08:00
问题 毕竟群组成员可能随时有新成员加入,或者旧成员更新头像昵称
建议 你所说的问题 你可以提供一个刷新 的交互方式给他 而不是每次都刷新
skydiver
2014-11-12 10:19:56 +08:00
就像按住F5一样,这种都是要处理的,要么加缓存保证能撑住,要么加频次限制
Registering
2014-11-12 10:21:38 +08:00
@linKnowEasy 那么在列表中加一个下拉刷新,这点也可以借鉴参考
yanng
2014-11-12 10:55:39 +08:00
加个遮罩层,服务器返回了再去掉。另外计算两次请求的时间间隔,太频繁的请求禁止。
yjsslab
2014-11-12 10:59:21 +08:00
hjc4869
2014-11-12 11:01:20 +08:00
点击后禁用按钮。
Registering
2014-11-12 11:01:53 +08:00
@yjsslab 公司万恶的VPN
xoxo
2014-11-12 11:02:11 +08:00
服务端限制
Registering
2014-11-12 11:05:39 +08:00
@xoxo 服务端限制,,那是请求已经发生之后的事情了,,,目的是避免多余请求
xoxo
2014-11-12 11:15:51 +08:00
@Registering 那就前端限制
tini8
2014-11-12 11:18:23 +08:00
想多了
jfengsky
2014-11-12 12:10:26 +08:00
我的做法是在发请求前禁用按钮
jsPop
2014-11-13 10:47:28 +08:00
前端控制:

1 缓存:群组信息缓存在页面范围里,如果你是前端渲染的话最好,缓存数据即可。缓存设置一个ttl,过期就重新请求后端,在不用websocket保持同步的情况下,我觉得1分钟都没问题。缓存甚至可以保留数据在localStorage。
当用户点击群组时,利用缓存立刻更新群组。这时有两种情况,数据过期与未过期。未过期就不用做额外处理。过期的话,在你的界面弄个小指示,表示现在在更新数据,然后往后台拿数据,拿到之后更新数据,刷新B。

2 websocket push同步。详见 http://socket.io/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/145812

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX