我正在开发一个使用Mysql,javascrit和jquery作为技术的php项目。
在那里,当用户在文本框中键入以按名称搜索产品时,我需要为用户提供自动建议选项。
当前实现在加载页面时将数据库中的所有产品名称作为json字符串加载,然后根据输入过滤字符串。当数据库中有大量名称(大约100,000个名称)时,这是低效的。
我需要改变这种逻辑。我需要在用户在文本框中键入的同时使用ajax请求从数据库中检索名称。 例如,最初建议列表中没有可用的名称。然后,当用户键入“A”时,应用程序应该向数据库发送ajax请求,然后检索包含“A”字母的所有名称并将其作为json字符串。
但是这个方法的问题是我们必须进行大量的数据库访问并以响应的速度获得响应以显示为建议。
我是否可以使用任何技术来提高此ajax数据库访问的效率。有人可以帮我解决这个问题。
先谢谢。
答案 0 :(得分:2)
JQuery
UI
网站提供了一些可能有帮助的自动完整示例。其中一个例子是远程缓存:
http://jqueryui.com/demos/autocomplete/#remote-with-cache
如果单击右上角的新窗口,示例将在新窗口中打开,您可以在其中将源代码复制到您自己的文件中并根据需要进行修改。
答案 1 :(得分:1)
最佳答案取决于您的应用程序拥有的用户数以及数据更改的频率。我在一个场合所做的是加载完整的名称列表并让网络浏览器对其进行缓存:这样服务器最低限度地加载并且建议很快完成。它运行良好,因为唯一用户的数量很少,而且数据不经常更改。
我在这里有一个使用Prototype和CakePHP的例子:http://jonisalonen.com/2011/crazy-fast-ajax-search-suggest-in-cakephp-using-browser-cache/将它改编为jQuery应该不会太难。
答案 2 :(得分:1)
我已经实现了几次这样的事情,我发现除非你处理大约1,000个对象,否则每次通过AJAX访问数据库都是最好的选择。
然而我绝对建议您等到用户暂停后再提取建议。我发现等待大约500毫秒的暂停效果很好。换句话说,不是在每次按键时按下数据库,而是使用JavaScript计时器仅在按下按键后500ms获取建议,在此时间内不会按任何其他按键。