如何提高Jquery自动完成的性能
我打算使用jQuery自动完成的网站,并已经实施了testing版本。 我现在使用ajax调用为每个字符input检索一个新的string列表。 问题是,在新的列表填充之前,它变得相当慢,1.5s。 什么是最快的方式来使自动完成? 我使用cakephp,只是做一个发现和10个项目的限制。
本文 – 关于flickr自动完成是一个非常好的阅读。 我有几个“哇”的经验阅读。
“这个小部件在200ms内下载了所有联系人的列表(使用JavaScript进行下载)(为了获得这个级别的联系人,这是真的)为了达到这个级别的性能,我们必须重新考虑如何从服务器到客户端“。
尝试预加载列表对象,而不是在飞行中执行查询。
此外,自动完成默认情况下有300毫秒的延迟。
也许消除延迟
$( ".selector" ).autocomplete({ delay: 0 });
1.5秒间隔是非常广泛的差距,以服务自动完成服务。
- 首先优化你的查询和数据库连接。 尝试保持您的数据库连接与内存caching活着。
- 如果您的服务被高度用于忽略重新提取,请使用结果caching方法。
- 使用客户端caching(JS列表)来保留客户端上的旧请求。 如果用户input并擦除,这将是有用的。 结果将来自前端caching而不是后端点。
- 正则expression式在客户端过滤不会是昂贵的,你可以给它一个机会。
在做一些优化之前,你应该首先分析瓶颈在哪里。 尝试找出每个步骤(input→请求→数据库查询→响应→显示)需要多长时间。 也许CakePHP实现有一个延迟,不要发送一个请求input每个字符。
在这种情况下速度的真正问题,我相信是在数据库上运行查询所需的时间。 如果没有办法提高查询的速度,那么也许可以扩展search范围,使其包含更多的项目,并在结果中包含高度排名的结果,您可以对每个其他字符执行一次search,并在客户端过滤20-30个结果。
这可能会改善性能的外观,但在1.5秒,我会首先尝试提高查询速度。
除此之外,如果你能给我们更多的信息,我可能会给你一个更具体的答案。
祝你好运!
PHP / SQL上的服务器端速度很慢。
不要使用PHP / SQL。 我用C ++写的自动完成,并使用哈希表来查找。 看看这里的performance。
这是赛扬300电脑,FreeBSD,Apache / FastCGI。
而且,你看,在巨大的字典上快速运行。 10,000,000条logging不是问题。
此外,支持优先事项,dynamic翻译和其他function。
自动完成本身并不慢,尽pipe你的实现当然可以。 我要检查的第一件事是延迟选项的值(请参阅jQuery文档)。 接下来,我会检查你的查询:你可能只能带回10条logging,但是你在做一个巨大的表扫描来获得这10条logging? 你是否将数据库中的大量logging带回集合,然后从集合中取出10个项目,而不是在数据库上进行服务器端分页? 一个简单的索引可能会有所帮助,但是你将不得不做一些testing来确保。