[英]How do you handle multiple AJAX requests in PHP?
我的AJAX搜索程序不断向PHP询问特定搜索字词的结果。 PHP脚本的开始通过MySQL数据库读取并进行初始化,因此,如果PHP继续重新启动,它将必须读取数据库数百万次。 如果我可以保持它的生命力,并让一个运行中的PHP脚本实例满足多个愚蠢的AJAX请求,我相信性能会有所提高。
您通常如何做? 使用服务? 服务可以做到吗?
PHP没有长期对象或线程或请求之间的共享状态的概念,每个请求始终从零开始(当然,会话状态除外)。 您可以通过缓存到磁盘或内存来模拟长期存在的对象(请参阅memcached )。
脚本初始化时,您是否有特定的原因读取整个数据库?
如何将数据库结果存储在会话变量中? 您将首先检查关键字是否不在会话中(会话允许在页面刷新之间传输变量值),否则,请执行数据库查询。
要存储它:
$_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.