【问题标题】:performance implications of php output buffering with Apache and MySQL使用 Apache 和 MySQL 进行 php 输出缓冲的性能影响
【发布时间】:2010-10-19 05:42:22
【问题描述】:

我对 php 缓冲的工作原理有点困惑。

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

以下是我不明白的地方:当有一些讨厌的跟踪器标注、javascript 或发送到浏览器的图像时会发生什么。浏览器挂断了,有一段时间没有与 Apache 对话,一直在等待。 Apache 没有发布 MySQL 线程,它显示为“睡眠者”。这是正确的还是我完全不在这里?

【问题讨论】:

    标签: php mysql performance apache


    【解决方案1】:

    你完全不在基地:)

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

    这不会对服务器端产生任何影响。

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

    1. 将所需的 PHP 文件编译为 opt-code(除非缓存是其中之一)
    2. 执行 PHP 选择代码
    3. 将 PHP opt-code 的字符串结果返回给浏览器

    您所说的缓冲发生在第 2 步和第 3 步之间。所以,让我们来看看您的场景。

    1. 请求 PHP URL
    2. 选择代码已编译
    3. PHP 执行开始并开始返回 html 字符串
    4. 创建了一个加载缓慢的 img 标签的字符串
      • PHP 继续向 apache 提供输出
      • 为图像(或 javascript 代码,或其他任何内容等)发出单独的 http 请求

    这是无能为力的单独请求。 PHP 和 Apache 所做的只是将 HTML 返回到浏览器。此 HTML 可能会生成一个 img 或 javasript 标记,这些标记将回调到同一个 Web 服务器,但这些请求将与为现有页面生成 HTML 的请求分开处理。

    【讨论】:

      【解决方案2】:

      浏览器不会因为从服务器下载 HTML 数据而“挂起”。它会继续下载整个页面,即使它正在等待一个 JavaScript 文件下载下来,然后才会真正显示它。

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

      【讨论】:

        猜你喜欢
        • 2021-08-06
        • 2013-02-08
        • 2012-03-14
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        相关资源
        最近更新 更多