【问题标题】:ob_flush takes long time to be executedob_flush 需要很长时间才能执行
【发布时间】:2012-12-03 22:44:15
【问题描述】:

在我的网站(使用 drupal 运行)中,ob_flush 函数需要很长时间(10 - 100 秒之间)才能执行。我如何找出原因?是什么导致了这么长时间?

【问题讨论】:

  • 是什么让你觉得这个功能冻结了你的应用程序?
  • @ualinker 请看我刚刚上传的图片
  • 能否也粘贴带有ob_start() 和ob_flush() 上下文的代码?
  • 查看 ob_list_handlers() 列出的函数
  • @rambocoder ob_list_handlers() 返回一个包含 2 个值的数组:“默认输出处理程序”

标签: php performance drupal-7 output-buffering


【解决方案1】:

试试这个:

ob_start();
//Your code to generate the output
$result = ob_get_contents(); //save the contents of output buffer to a string
ob_end_clean();
echo $result;

对我来说它运行得很快。

【讨论】:

    【解决方案2】:

    [您可能想用 Drupal 标记您的问题,因为这感觉可能是 Drupal 问题。具体来说,我怀疑当你刷新缓冲区时,你正在写入一个外部缓冲区,这会触发大量的钩子被调用来过滤你刚刚写入的数据。]

    我怀疑您的问题是嵌套缓冲区。 Drupal 真的很喜欢缓冲区,并且在所有地方都可以缓冲所有内容。检查结果:

    echo "<pre>\nBuffering level: ";
        . ob_get_level() .
        . "\nBuffer status:\n"
        . var_dump(ob_get_status(TRUE))
        . "\n</pre>";
    

    如果您有嵌套缓冲区,那么我怀疑 ob_flush() 不会为您做任何事情:它只是将内部缓冲区的内容附加到下一个最外层的缓冲中。

    嵌套缓冲区可以来自 Drupal 本身(上面将显示),或者来自 zlib-output-compression 和 output_buffering 的设置(尝试调整它们,看看它是否会改变任何东西)。

    如果您的缓冲区没有嵌套,并且上述设置没有帮助,那么您可能还希望将操作拆分为多个部分,并在那里运行分析器,以查看哪个部分占用了时间:

    $data = ob_get_contents(); // Return the contents of the output buffer.
    ob_clean(); // Clean (erase) the output buffer.
    ob_end(); // Close the buffer.
    echo($data); // Output our data - only works if there's no outer buffer!
    ob_start(); // Start our buffer again.
    

    那么问题就变成了,“你想要完成什么?”你认为 ob_flush() 在这里做什么?因为如果答案是“我想将迄今为止所做的一切推送到浏览器”......那么我担心 ob_flush() 不是正确的方法。

    【讨论】:

      【解决方案3】:

      设置

      output_buffering = Off

      在 php.ini 中

      【讨论】:

        【解决方案4】:

        使用

        <?ob_start();?>
        

        在页面的开头和

         <?ob_flush();?>
        

        在页面末尾,解决这个问题。

        【讨论】:

          猜你喜欢
          • 2011-03-14
          • 2021-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-06
          • 1970-01-01
          相关资源
          最近更新 更多