使用jquery自动完成功能向服务器请求太多

时间:2017-09-06 13:12:49

标签: php jquery performance database-performance

假设我在数据库中有数千个项目,并且我想使用某种自动完成功能(如jQuery自动完成功能)来搜索它们,但我不想使用ajax,因为每次按键都会发出请求数据库中。

我可以在没有ajax的情况下使用这个。

$( function() {
    var availableTags = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++"
    ];
    $( "#tags" ).autocomplete({
      source: availableTags
    });
  } );

但如果因为我有数以千计的商品,这也会对服务器和网站的速度产生影响吗?

是否明智地能够首先获取所有记录并将它们放在一个单独的文件中,然后在那里搜索它,以便使网站更快速,更少负载在服务器上?

1 个答案:

答案 0 :(得分:2)

如果您有数千条记录,当然您需要使用ajax,否则您将在客户端加载大量数据,将整个信息暴露给想要窃取它的人,同时放慢速度下载页面。

有两种减少请求的方法:

实施去抖动

去抖动只是一个计时器,在执行请求之前等待X毫秒。如果用户在此计时器完成之前键入了某些内容,则取消它并启动另一个计时器。

下行:需要对去抖时间进行微调,以免用户感到有些滞后。

取消请求

您可以在每次按键时触发请求,但如果按下其他键,则取消之前的请求。这可能会减少服务器上的负载,因为请求可能尚未完成。

下行:如果用户输入的速度比服务器响应时间快,则只会减少服务器上的负载。

将Debounce与取消请求相结合

如果你结合上述两种技术,你会得到一个好的结果,因为你可以减少去抖时间以产生难以察觉的延迟,如果用户输入缓慢,也可以取消待处理的请求。