2009-10-01 65 views
7

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

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

回答

1

我认为这是最好的高流量的网站使用它,或者至少把隐含冲洗掉,以避免通过网络发送部分响应,因为它可能会减慢速度如果接收器的速度太慢,那么脚本的其余部分也是如此。

通过发送一次整个响应,您释放由PHP脚本中使用的所有资源,所以它的效率更高。

+0

我只是读abit abt PHP输出缓冲区也。我想这将需要服务器内存来存储整个页面B4发送出去,作为一个正确的?所以有可能它会比不使用缓冲使用更多的内存? – iceangel89 2009-10-01 10:03:11

+0

@ iceangel89那是我最初的问题,什么我真的想找出 – JasonDavis 2009-10-01 10:27:03

+0

对不起,我忘了提及这一点......我想用gzhandler压缩时输出缓冲的开销是非常重要的。对于简单的缓冲,它将所有内容都存储在内存中,但我认为你不会看到巨大的差异(大的html页面不会超过200K,是吗?)。您可以使用memory_get_usage()轻松测试该输出是否带有输出缓冲。 – 2009-10-01 12:41:34

3

有两个原因,这样你就不会 等待网络插座是 可每次回波时输出缓冲是非常有用的

  1. 由于性能。
  2. 为了避免过于 早发送头。一旦你已经派了一些 内容到浏览器的标题 也必须发送,毕竟这是再 做你无法修改它们 例如如果你想设置一个cookie或者更改内容类型。

当然存在将所有内容存储在内存中直到请求结束的惩罚。与PHP过程的整体大小相比,这通常应该很小。也就是说,除非你打算发送大量文件。如果是这种情况,您可以定期使用ob_flush()和flush()(或暂时禁用缓冲区)来刷新缓冲区,以减少使用的峰值内存。

在我看来,你应该有它在所有的时间和在特殊情况下将其删除。