繁体   English   中英

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

[英]How do you handle multiple AJAX requests in PHP?

我的AJAX搜索程序不断向PHP询问特定搜索字词的结果。 PHP脚本的开始通过MySQL数据库读取并进行初始化,因此,如果PHP继续重新启动,它将必须读取数据库数百万次。 如果我可以保持它的生命力,并让一个运行中的PHP脚本实例满足多个愚蠢的AJAX请求,我相信性能会有所提高。

您通常如何做? 使用服务? 服务可以做到吗?

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

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

如果您知道每次的结果都是相同的,只需将这些结果移至会话变量即可。

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

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

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

要存储它:

$_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() });

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

对于非常大的站点,memcached通常是更好的选择。 而且,某种形式的php缓存也有帮助,SQL连接池降低了打开SQL连接的开销。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM