你如何在PHP中处理多个AJAX请求?

时间:2009-09-29 19:26:02

标签: php ajax http scripting webserver

我的AJAX搜索程序一直在向PHP询问特定搜索词的结果。 PHP脚本的开头通过MySQL数据库读取并初始化,因此如果PHP不断重启,则必须读取数百万次数据库。如果我可以保持它活着并让一个正在运行的PHP脚本实例提供多个愚蠢的AJAX请求,我相信性能会提高。

你通常如何做到这一点?使用服务?这可以通过服务完成吗?

5 个答案:

答案 0 :(得分:2)

PHP没有长期对象的概念或线程或请求之间的共享状态,每个请求总是从零开始(当然除了会话状态)。您可以通过缓存到磁盘或内存来模拟长期存在的对象(请参阅memcached)。

在脚本初始化时,您是否有特殊原因要读取整个数据库?

答案 1 :(得分:1)

如果您知道每次结果都相同,只需将这些结果移动到会话变量。

PHP会话在其文档中得到了很好的解释:

http://us3.php.net/manual/en/book.session.php

答案 2 :(得分:1)

如何将db结果存储在会话变量中?您首先检查关键字是否不在会话中(会话允许在页面刷新之间传输变量值),如果不允许,则执行数据库查询。

存储它:

$_SESSION['storedQueries']['keyword']= 'its definition, from the database';

寻找它:

  $index=  array_search('keyword',array_keys($_SESSION['storedQueries']));
  $result = ($index) ? $_SESSION['storedQueries'][$index] : 'nothing found, you should do a db query';

如果您使用javascript库,例如jquery:

,则ajax部分非常简单
$('#resultZone').load('find.php',{keyword: $('input.search').val() });

答案 3 :(得分:1)

如果搜索结果与多个用户类似,我通常会创建一个缓存文件并在那里序列化结果集。作为文件名,我可能会使用包含搜索查询和用户组的字符串的md5sum。然后,当Ajax需要数据时,我只需要检查文件是否太旧,如果不是,我只需将其发送到客户端,甚至可能只是将Ajax http请求重定向到文件(假设格式正确) 。如果文件太旧,我只需用新内容刷新它。

对于体积非常大的网站,memcached通常是更好的选择。还有一些php缓存帮助和SQL连接池降低了打开SQL连接的开销。

答案 4 :(得分:0)

连接到数据库是一项非常昂贵的操作,您可以通过缓存结果来解决这个问题,看看Zend_Cache并了解它如何为您节省麻烦。