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

如何在PHP中处理多个AJAX请求?,php,ajax,http,scripting,webserver,Php,Ajax,Http,Scripting,Webserver,我的AJAX搜索程序不断向PHP询问特定搜索词的结果。PHP脚本的开始读取MySQL数据库并初始化,因此如果PHP继续重新启动,它将不得不读取数据库数百万次。如果我能保持它的活力,让多个愚蠢的AJAX请求由一个运行的PHP脚本实例提供服务,我相信性能会有所提高 您通常是如何做到这一点的?使用服务?使用服务可以做到这一点吗?如果您知道每次的结果都是相同的,只需将这些结果移动到会话变量中即可 PHP会话在其文档中有很好的解释: 如果您知道每次的结果都是相同的,只需将这些结果移动到会话变量中即可 PH

我的AJAX搜索程序不断向PHP询问特定搜索词的结果。PHP脚本的开始读取MySQL数据库并初始化,因此如果PHP继续重新启动,它将不得不读取数据库数百万次。如果我能保持它的活力,让多个愚蠢的AJAX请求由一个运行的PHP脚本实例提供服务,我相信性能会有所提高


您通常是如何做到这一点的?使用服务?使用服务可以做到这一点吗?

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

PHP会话在其文档中有很好的解释:


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

PHP会话在其文档中有很好的解释:


将db结果存储在会话变量中如何?首先检查关键字是否不在会话中(会话允许在页面刷新之间传输变量值),如果不在会话中,则执行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() });

将db结果存储在会话变量中如何?首先检查关键字是否不在会话中(会话允许在页面刷新之间传输变量值),如果不在会话中,则执行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() });

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


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

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


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

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


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

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


对于容量非常大的站点,memcached通常是一个更好的选择。此外,某种php缓存也有帮助,SQL连接池可以降低打开SQL连接的开销。

连接到DB是一项非常昂贵的操作,您可以通过缓存结果来解决这个问题,看看它如何可以节省您的时间

连接到数据库是一项非常昂贵的操作,您可以通过缓存结果来解决这一问题,看看它如何节省您的时间

这是用于标签系统的吗?你不可能一次解析文本中的关键词,并将找到的关键词一劳永逸地转换为链接?也许可以解释一下你打算做什么。基本上我有一个PHP脚本,AJAX请求应该查询这个脚本。我不确定我将如何做AJAX部分,但我试图先了解PHP方面。这是用于标记系统的吗?你不可能一次解析文本中的关键词,并将找到的关键词一劳永逸地转换为链接?也许可以解释一下你打算做什么。基本上我有一个PHP脚本,AJAX请求应该查询这个脚本。我不确定我将如何做AJAX部分,但我试图首先了解PHP方面。会话变量是否通过HTTP发送?来自文档:“访问您网站的访问者被分配了一个唯一的id,即所谓的会话id。它要么存储在用户端的cookie中,要么在URL中传播。”会话变量是否通过HTTP发送?来自文档:“访问您网站的访问者被分配了一个唯一的id,即所谓的会话id。该id存储在用户端的cookie中,或者在URL中传播。”