我有一个名称查找框,通过您的典型ajax请求操作。下面是每次按下字母时都会触发的Javascript的一般流程:停止请求服务器端
- 如果ajax请求已打开,则中止它。
- 如果超时已经创建,请将其销毁。
- 设置新的超时运行以下在半秒:通过AJAX
- 发送字符串“nameLookup.php”
- 等待回应
- 显示效果
的问题是,nameLookup .php是非常重要的资源。在某些情况下,多达10,000个名字正在从SQL数据库中提取,解密并与字符串进行比较。在正常情况下,请求可能需要5到60秒才能返回。
我完全明白,当您在客户端中止请求时,服务器仍在处理事件并发回结果。只是客户端知道忽略响应。但是服务器在处理所有这些请求时变得如此悬而未决。
所以,如果你这样做:
- 请求1个
- 中止请求1
- 请求2
- 中止请求2
- 要求3
- 等待请求响应3
服务器甚至没有在请求3上工作,直到它完成1和2 ...或者它只是在请求1和2上工作,以致请求3需要额外的很长时间。
我需要知道如何告诉服务器停止对请求1和2的工作,所以我可以腾出资源,以便在要求工作3
我使用Javascript &的jQuery在客户端。 PHP/Apache和SQL在服务器端。
你试过缓存结果吗?我个人建议安装和使用memcached。添加一个类,你可以在1个月或1周后取决于你的需要 –
也可以过期结果,看看下面的帖子http://stackoverflow.com/questions/13886501/ajax-abort-is-not-aborting -on-the-server-only-the-the-client –
我同意你只是有一个架构问题的其他意见。被查询数据的基数是多少(即缓存是否合理)。什么是数据的大小?它是否适合特里结构或类似的搜索树,使查找效率更高? –