阻止后端的连续SQL请求

时间:2018-03-26 09:26:45

标签: mysql angularjs laravel rest

上下文

我正在开发一个具有square前端和AngularJS后端且Laravel作为数据库的应用程序。后端基本上用作REST API。

问题

在搜索页面上工作时,我遇到了问题,当用户点击多个过滤器,在搜索文本字段中写入或快速浏览页面时,会发送多个请求,因为搜索响应会自动更新搜索按钮会大大减慢响应时间。

所以我尝试通过取消请求来解决这个问题。 这是使用MySQL的代码:

Restangular

Image of requests cancelled on the frontend

问题是我认为请求仍然会进入后端,所以当请求的前端部分被取消时,数据库很慢。

我不希望应用程序感到反应迟钝,因此我不想阻止请求在前端发送一段时间以确保用户已完成查询。

问题

  • 如果连续的MySQL来自同一个用户,是否有办法阻止后端的MySQL请求?
  • 我认为这是高级搜索实现的典型问题,是否有多种策略可以解决它?

1 个答案:

答案 0 :(得分:0)

后端

如果您的数据没有快速变化,可以通过添加反向代理来缓存Web服务器上呈现的结果,从而获得良好的解决方案。

这样,如果重复请求相同的URL,您的代理将从缓存中提供已呈现的文档。根据数据的性质,可以在不同的缓存保留下缓存不同的URL端点。

Nginx具有内置的功能和ha-proxy,而庞德也可能是不错的选择。

前端

另一个解决方案可能是在前端更聪明,即将结果暂时存储在内存或基于浏览器的数据库IndexedDB中。这有助于两种典型情况:

  1. 如果用户撤消过滤器窗口小部件,则先前的结果将准备就绪。
  2. 如果用户缩小搜索范围,您可以通过过滤IndexedDB中的数据来过滤。