有一比较耗时间的查询 怎么才能做到 用户提交查询后 直接返回一个”开始查询的提示” 等真正查询结果出来 再进行提示呢?
1
randyzhao 2016-01-27 22:55:15 +08:00
难道最简单的不就是 Ajax 么.
|
3
supman OP 还是不大明白。。。
|
4
Midnight 2016-01-27 23:13:05 +08:00
前后端都异步
|
5
yeyeye 2016-01-28 00:10:21 +08:00
1 楼的方式应该是这样
查询按钮一点击下去,马上蹦出一个提示,正在查询,然后通过 ajax 去获取这个很慢的数据,获取到之后去掉提示,展示数据,这样的话有一个缺点,有一个请求一直卡在那里 这个问题我在很久很久很久之前就考虑过 我说一个可行的方式(全程用 ajax ) 1.客户端查询的直接展示一个查询中的提示,然候伴随发送一个随机字符串,作为这次查询的依据,请求发送成功后,直接断掉这个连接 2.服务器收到这个随机字符串,放到数据库里,并标记状态为正在处理,然后进行查询,忽略掉前端终止页面而停止脚本,查询完成后把数据存入这个数据库的相同标记里,把状态字段改为查询成功,如有故障无法完成,则标记状态为故障 3.客户端在之前做了断开操作后,开始每 N 秒向服务器发起查询,查询数据库里的标记(附带上前面的那个随机字符串)。若完成则返回结果展示给用户 1.可能不知道如何断开一个连接,我也不知道怎么断,如果前台不会就用后台实现吧, WP 就是这样执行 cron 的,发送一个请求到 cron 页面,然后直接断掉,让它异步的慢慢处理,不再管了,人家是开源的,你自己去看。 2.可以选择发送随机字符串作为查询凭证,也可以由服务器发放一个 ID 给客户端作为凭证 3.这个没什么技术含量了 |
6
hxsf 2016-01-28 00:56:51 +08:00 via iPad
@yeyeye 这样的话本来收到请求-执行-返回,就变成收到请求-返回-写库-执行-写库-接受轮询-返回结果,期间还要响应轮询。。。
话说 b/s 的话如果有长处理的话,尽量优化逻辑,化整为零,把计算量分摊到平时。 实在优化不行就用 websocket 通信吧。。。 |
7
ArthurKing 2016-01-28 09:13:56 +08:00
前台提交任务,任务提交入库或者入队列,然后后台开个线程池专门处理。处理完毕后写状态,前台只管轮询状态等待处理完成后显示结果即可。
|