PHP中的输出缓冲是否需要更多资源?

时间:2009-10-01 09:45:55

标签: php output-buffering

当性能很重要包括服务器内存时,我很好奇是否使用输出缓冲  像ob_start();在没有使用它的PHP中有任何性能命中?它是否使用更多内存或任何东西来使用它?

在我的高流量网站上,我需要所有内存,我可以用于内存缓存和APC以及所有其他服务器活动,我只是好奇,如果我应该使用它,它唯一真正的原因它派上用场了我是重定向页面,发送标题我应该说在标题已经发送后,我的网站有标题,正文,页脚文件设置所以有时我需要重定向取决于正文文件中的内容所以如果标题已经显示产生问题的离子屏幕,使用输出缓冲是一种解决方案,但还有其他解决方案,所以只是对性能感到好奇

2 个答案:

答案 0 :(得分:4)

输出缓冲有用的原因有两个

  1. 为了表现,你不是 等待网络套接字 每当你回音时都可以使用。
  2. 避免发送标题 早。一旦你发了一些 内容到浏览器的标题 在此之后也必须发送 完成然后你不能修改它们 例如如果你想设置一个cookie或 改变内容类型。
  3. 当然存在将所有内容存储在内存中直到请求结束的惩罚。与PHP进程的总体大小相比,这通常应该非常小。也就是说,除非你计划发送大量文件。如果是这种情况,您可以使用ob_flush()和flush()(或者暂时完全禁用缓冲区)定期刷新缓冲区,以减少使用的峰值内存。

    在我看来,你应该一直使用它并在特殊情况下删除它。

答案 1 :(得分:3)

我认为最好将它用于高流量站点,或至少转动隐式刷新,以避免通过网络发送部分响应,因为如果接收器也很慢,它可能会减慢脚本的其余部分。

通过一次发送整个响应,您可以释放php脚本使用的所有资源,因此效率更高。