use*_*173 2 javascript database ajax jquery autocomplete
在 jQuery ajax 自动完成小部件中使用 db 数据时,如何解决对数据库的请求过多的问题?基本上每次用户插入一个字母时,脚本都会向数据库发出ajax请求,将db请求保持在最小的最佳实践是什么?
我从第三方应用程序获取数据,因此我必须考虑它可以在我的应用程序中更改。
几个月前我遇到了同样的问题。
我找到了两个解决方案:
解决方案 1:
不要从键入的第一个字母开始查询。使用“minLength”自动完成属性。minLength 文档在这里。添加该属性后,第一个查询将从n开始,其中n是先前键入的字母的数字(整数)。
例子 :
$( ".selector" ).autocomplete({
minLength: 3
});
Run Code Online (Sandbox Code Playgroud)
解决方案 2:
在多次发送之间添加一个(非常短但对数据库很好)延迟。像 250/300/500 毫秒这样的短时间(取决于您和数据库之间的 ping 或用户带宽)确实是可观的。延迟文档链接在这里。值以毫秒为单位(整数)。
例子 :
$( ".selector" ).autocomplete({
delay: 500
});
Run Code Online (Sandbox Code Playgroud)
我希望它会符合您的需求。
不要犹豫,同时使用两者。
您可以限制或取消请求。这些函数通常包含在 Lodash ( https://lodash.com/docs/4.17.2#debounce ) 等库中。
反跳:按下按键时,计时器启动。当计时器结束时,您可以进行 Ajax 调用。当在计时器期间按下另一个键时,计时器会重置。
Throttle:按下某个键时,将进行 Ajax 调用并启动计时器。当计时器运行时按下另一个键时,该键将被忽略。