Javascript 搜索和懒虫负载无法跟上打字速度?

Javascript 搜索和懒虫负载无法跟上打字速度?,javascript,jstree,Javascript,Jstree,所以,所有的代码都运行得很好。查询数据库时,节点/父ID被延迟地传递给jsTree,如果在搜索栏中键入一个术语,则类似的过程将继续进行,但传递给jsTree的节点是另一个SQL查询返回的节点,该查询使用类似于SELECT nodeID的名称,例如%searchTerm% 只有一个问题: 如果我在搜索栏中输入得太快,结果就会相互混淆。如果我打字慢一点,估计每秒最多2个字母,一切正常。再快一点,一切都变得模糊起来。也就是说,如果我正在搜索包含术语test的名称,并快速键入,我将得到包含t、te、te

所以,所有的代码都运行得很好。查询数据库时,节点/父ID被延迟地传递给jsTree,如果在搜索栏中键入一个术语,则类似的过程将继续进行,但传递给jsTree的节点是另一个SQL查询返回的节点,该查询使用类似于SELECT nodeID的名称,例如%searchTerm%

只有一个问题:

如果我在搜索栏中输入得太快,结果就会相互混淆。如果我打字慢一点,估计每秒最多2个字母,一切正常。再快一点,一切都变得模糊起来。也就是说,如果我正在搜索包含术语test的名称,并快速键入,我将得到包含t、te、tes和test的名称,而不仅仅是包含test的名称


以前有人有这个问题吗?我是否应该使用等待就绪功能?

我可以建议您进行“超时”解决方案。基本上,您可以创建一个延迟为200-400毫秒的SetTimeout函数,然后在那里启动lazyload ajax。每次inputbox.change事件都会重新启动时间。请参见伪javascript中的示例:

$('#your-input').keydown(function(){
    if(ajaxTimer != undefined) {
        clearTimeout(ajaxTimer);
    }
    ajaxTimer = setTimeout(function(){
        $.ajax({...}).done(function() {...}
    },400);
})

在键入输入上使用节流阀,基本上可以保证每X秒调用一次函数的最大值。当然你可以写你自己的,但是已经有一个很棒的图书馆了


如果您感兴趣,请查看它

,您可能希望查看您的SQL逻辑。当您使用%searchTerm%这样的名称时,您将进行全表扫描,这很慢。您可能希望在应用程序中缓存字符串,并进行快速正则表达式匹配,以避免在db中运行很长的等待时间。