2012-01-13 126 views
0

我正在使用Mysql,javascrit和jquery作为技术的php项目。使用ajax高效地访问mysql数据库(jQuery)

在那里,我需要为用户提供自动建议选项,当他们在文本框中键入搜索产品的名称。

当页面加载时,当前实现从数据库加载所有产品名称作为json字符串,然后根据输入过滤字符串。当数据库中有大量名称(大约100,000个名称)可用时,这是低效的。

我需要改变这个逻辑。我需要在用户在文本框中输入的同时,使用ajax请求从数据库中检索名称。最初在建议列表中没有可用的名字。然后,当用户键入“A”时,应用程序应该向数据库发送ajax请求,然后检索包含“A”字母的所有名称并将其作为json字符串获取。

但是,这种方法的问题是我们必须做大量的数据库访问,并获得响应作为键入的速度显示为建议。

是否有任何技术可以用来提高这个ajax数据库的访问效率。有人可以帮助我解决这个问题。

在此先感谢。

回答

2

JQueryUI网站提供了一些可能有助于自动完成的示例。其中一个例子是远程缓存:

http://jqueryui.com/demos/autocomplete/#remote-with-cache

如果你点击新窗口右上方的例子将在新窗口中打开,您可以在源代码复制到自己的文件,并修改为需要是。

+0

谢谢马修我会经历这个。 :) – Thilanka 2012-01-13 08:33:52

1

最佳答案取决于您的应用程序的用户数量以及数据更改的频率。我曾经做过的事情是加载完整的名称列表并让网页浏览器缓存它:这样服务器的加载很少,并且建议完成得非常快。它运作良好,因为唯一用户的数量很少,数据变化很少。

我在这里有一个使用Prototype和CakePHP的例子:http://jonisalonen.com/2011/crazy-fast-ajax-search-suggest-in-cakephp-using-browser-cache/它不应该太难以适应jQuery。

+0

谢谢Joni。目前我所做的id是加载所有名称并将其作为json字符串发送。但是当我们在数据库中有大量的名字时它会失败。这与缓存它们的建议是否相同? – Thilanka 2012-01-13 08:38:19

+1

什么失败? 循环存储在数组中的100,000个名字可能需要很长时间。您应该使用适合该任务的数据结构:http://stevehanov.ca/blog/index.php?id = 120 – Joni 2012-01-13 11:28:04

+0

感谢Joni。好吧,我会检查。 :) – Thilanka 2012-01-16 04:05:40

1

我已经实现了这种事情几次,我发现,除非你处理约1000个对象,然后每次通过AJAX打到数据库是最好的选择。

但是我肯定会推荐等到用户暂时停止提取建议之前。我发现等待约500ms的暂停效果很好。换句话说,不是每按一次键都敲击数据库,而是使用JavaScript定时器在按下按键500ms后才提取建议,在此期间不提供其他按键。

+0

谢谢@philwilks但是,如果我们通过一个非常慢的网络访问服务器,每500毫秒查询数据库是不可能的,并不会立即返回结果。 – Thilanka 2012-01-13 08:59:32

+1

@ Thilanka不是每500毫秒。每次用户在输入中按下一个键等待500毫秒。如果在这段时间内没有按下其他键,则检索数据。如果按下另一个键,则重新启动计时器。 – kapa 2012-01-13 12:25:14

+1

我承认我在数据库上实现的所有网站都位于同一台服务器上,或者位于同一机架上的服务器上,因此查询速度非常快。 @bazmegakapa谢谢你澄清我在说什么! – philwilks 2012-01-14 18:21:08