我计划对网站使用jquery自动完成功能,并已实施测试版本。我现在使用ajax调用来检索每个字符输入的新字符串列表。问题是它在填充新列表之前1.5秒变得相当慢。快速自动完成的最佳方法是什么?我正在使用cakephp,只是做了一个发现,并限制了10个项目。
答案 0 :(得分:54)
This article - 关于flickr如何进行自动填充是非常好的阅读。我有一些阅读它的“哇”经历。
“此小部件下载所有内容的列表 您的联系人,在JavaScript中,在 200毫秒以下(即使是这样也是如此) 拥有10,000多个联系人的会员)。在 为了达到这个水平 表现,我们不得不完全 重新思考我们如何从中发送数据 服务器到客户端。“
答案 1 :(得分:38)
尝试预加载列表对象,而不是动态执行查询。
默认情况下,自动完成的延迟时间为300毫秒 也许删除延迟
$( ".selector" ).autocomplete({ delay: 0 });
答案 2 :(得分:11)
1.5秒的间隔是非常宽的间隙,以提供自动完成服务。
答案 3 :(得分:5)
在做一些优化之前,你应该首先分析瓶颈的位置。尝试找出每个步骤(输入→请求→数据库查询→响应→显示)需要多长时间。也许CakePHP实现延迟不发送输入的每个字符的请求。
答案 4 :(得分:4)
在这种情况下,速度的真正问题我认为是在数据库上运行查询所需的时间。如果没有办法提高查询速度,那么可能会扩展搜索以包含更多具有高排名结果的项目,您可以在其他角色执行一次搜索,并在客户端过滤20-30个结果。
这可能会改善性能的外观,但在1.5秒后,我会首先尝试提高查询速度。
除此之外,如果你能给我们更多的信息,我可以给你一个更具体的答案。
祝你好运!答案 5 :(得分:4)
PHP / SQL上的服务器端很慢。
不要使用PHP / SQL。我的自动完成在C ++上编写,并使用哈希表进行查找。请参见效果here。
这是Celeron-300计算机,FreeBSD,Apache / FastCGI。
而且,你看,在巨大的词典上快速运行。 10,000,000条记录不是问题。
此外,支持优先级,动态翻译和其他功能。
答案 6 :(得分:1)
自动填充本身并不慢,尽管你的实现肯定可以。我要检查的第一件事是你的延迟选项的价值(参见jQuery文档)。接下来,我会检查您的查询:您可能只会带回10条记录,但是您是否正在进行大量的表扫描以获取这10条记录?您是否将数据库中的大量记录带回到集合中,然后从集合中获取10个项目而不是在数据库上进行服务器端分页?一个简单的索引可能会有所帮助,但您必须进行一些测试才能确定。