【问题标题】:Strategies for auto completing a text box with ajax使用 ajax 自动完成文本框的策略
【发布时间】:2009-07-01 01:02:06
【问题描述】:
youtube、google、facebook 甚至 Stackoverflow 如何通过他们的自动完成框实现出色的性能?它真的很快,感觉就像是本地搜索,即使在后台他们可能正在调用数据库。 (想象一下数据库调用所需的所有资源!)
仅仅是服务器和带宽的问题吗?
使用这种技术最大化性能的策略是什么?寻找诸如
之类的回答者
1) 在用户输入至少 3 个字母后启动 ajax 回调
2)缓存数据库结果?如果有怎么办?
3)预加载数据?如果是这样
4) 等等...
如果我使用带有 sql server 2008 的 asp.net mvc 很重要。
【问题讨论】:
标签:
jquery
ajax
autocomplete
【解决方案1】:
一些查询自然会变得更快(并且可以使用客户端缓存)。这适用于任何查询,其中随着“关键字”的增长,结果始终是先前结果的子集。
例如假设您正在寻找要发送电子邮件的联系人...(共 8,000 个联系人)
Typed | Results | Search | Cached?
"j" | 2,500 | server | server
"je" | 847 | server | server (+ client?)
"jef" | 192 | server | server + client
"jeff"| 23 | client | client
您必须确定缓存结果的最佳时间/地点,但是一旦您拥有“小”集(例如少于 250 个),您不妨在客户端上搜索缓存。
【解决方案2】:
尝试使用 Firebug 来查看 google 回调会发生什么,这令人印象深刻且易于解释。
【解决方案3】:
仅将它用于您可以缓存的查询(查找可用于服务器端语言/架构和数据库的数据库缓存技术(例如 memcached)...没有任何使用 MS 技术的经验)并且速度很快(例如,在搜索文章时只搜索标题而不是整个文本......这就是高级搜索的目的)。如果可能的话,您也应该针对这些调用优化您的数据库(索引)。当然要限制结果(我的猜测是传输所有数据(请求响应)的时间比数据库查询本身要长)。