使用输出缓冲被认为是一种不好的做法?

时间:2011-01-19 03:08:40

标签: php output-buffering

php程序员一般认为ob_start / ob_get_clean()是不好的做法吗?

输出缓冲有什么缺点吗?

8 个答案:

答案 0 :(得分:21)

这实际上是一种很好的做法。加速数据传输

答案 1 :(得分:15)

在某些情况下输出缓冲几乎是强制性的。只要您将某些内容输出回用户,就会使用PHP发送标头。因此,如果您在处理页面时遇到问题,那么除非启用缓冲,否则需要发送标题。否则你会得到可怕的“无法修改标题信息 - 标题已经发送”。

有些人会告诉你,你不应该这样编码。我说是骗子!

启用缓冲区后,您的代码可以更灵活。

答案 2 :(得分:10)

输出缓冲不是一个坏习惯。例如,它可以speed up the loading of your website by using GZIP compression(尽管如果可能的话,最好在.htaccess中执行此操作)。

<?php 
    if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) 
        ob_start("ob_gzhandler"); 
    else 
        ob_start(); 
?>

缺点:我不知道。好问题。

P.S:我也发现了这个关于output buffering的话题。

答案 3 :(得分:7)

为了提高程序效率,输出缓冲区捕获也不错。这是PHP的一个有用功能。但是,它可以用于其他方法更好的事情。代码气味可能是一个问题,因此请确保没有更好,更清晰的解决方案。

答案 4 :(得分:4)

这不算坏(或好)。有些人喜欢它,有些人不喜欢 我个人认为有理由不使用它。我认为这是最后的手段。有时您可能遇到输出缓冲可能是解决特定问题的唯一选择的情况,因此请仅针对此类情况保存此选项。

我认为使用它不会有任何性能提升或加速页面加载,但它也取决于您使用的服务器以及使用php作为mod_php或cgi或fastcgi。

答案 5 :(得分:3)

输出缓冲的主要缺点是不知道(或注意)缓冲区堆栈的深度。将此与过度激进的错误处理或意外退出/死亡的子程序相结合,你将丢失缓冲区中的任何内容,留下一些关于发生了什么的线索。

例如,Zend框架几乎可以为所有内容使用输出缓冲,但是当它遇到严重错误时会打印一条消息并立即退出。任何有用的调试信息都会丢失。

答案 6 :(得分:1)

如果我没弄错,java也有这个输入和输出缓冲来读写文件。

答案 7 :(得分:1)

肯定输出缓冲意味着可以立即发送到浏览器的内容现在正在服务器上占用,这占用了额外的内存(如果你正在处理高可扩展性,这是一个非常重要的问题)所以如果你的程序然后需要一段时间才能执行,这种内存开销会影响性能。

我不太了解PHP,如果这是真的,或者当你不使用缓冲时它甚至可以释放内存,但这通常就是理论。