使用Apache和MySQL进行php输出缓冲的性能影响

时间:2009-04-13 22:16:58

标签: php mysql performance apache

我对php缓冲如何工作有点困惑。

假设您在foo.php中有一个php页面output_buffering = 4096php.ini,而Apache会收到foo.php的get请求。 foo.php开始执行,一旦准备好4096个字节,它们就会被发送到Apache。 Apache开始向客户端发送这4096个字节。

这是我不明白的事情:当有一些令人讨厌的跟踪器标注,javascript或发送到浏览器的图像时会发生什么。浏览器被挂断了,并且暂时没有回到Apache,并坚持下去。 Apache没有发布MySQL线程,它正在显示为“睡眠者”。这是正确的还是我完全不在这里?

2 个答案:

答案 0 :(得分:4)

你完全偏离了基础:)

  

当有一个讨厌的跟踪器标注时会发生什么,a   javascript或发送到浏览器的图片

这不会影响服务器端的任何内容。

通过PHP运行的每个请求都将

  1. 编译所需的PHP文件以进行选择代码(除非缓存是一个)
  2. 执行PHP opt-code
  3. 将PHP opt-code的字符串结果返回给浏览器
  4. 您正在谈论的缓冲发生在步骤2和3之间。因此,让我们采取您的方案。

    1. 要求提供PHP URL
    2. 编制了选择代码
    3. PHP执行开始并开始返回html字符串
    4. 创建了一个加载缓慢img标记的字符串
      • PHP继续向apache提供输出
      • 为图像(或javascript代码,或其他等)制作单独的http请求
    5. 这是单独的请求,在这里无能为力。所有PHP和Apache正在做的是将HTML返回给浏览器。此HTML可能会生成一个img或javasript标记,该标记将回调到同一个Web服务器,但这些请求将与为现有页面生成HTML的请求分开处理。

答案 1 :(得分:2)

浏览器不会因为从服务器下载HTML数据而“挂断”。它会继续下载整个页面,即使它正在等待一个JavaScript文件在它实际显示它之前就会关闭。

当然,如果浏览器/服务器连接由于某种原因而中断,您可以让Apache等待ACK,直到连接超时,但这不是通常的情况。

相关问题