【问题标题】:Is using output buffering considered a bad practice? [closed]使用输出缓冲是否被认为是一种不好的做法? [关闭]
【发布时间】:2011-06-11 12:13:40
【问题描述】:

一般来说,ob_start / ob_get_clean() 是否被 php 程序员认为是不好的做法?

输出缓冲有什么缺点吗?

【问题讨论】:

    标签: php output-buffering


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    在某些情况下,输出缓冲几乎是强制性的。使用 PHP,只要您将某些内容输出回用户,就会发送标头。因此,如果您在处理页面的过程中遇到了需要发送标头的事情,除非打开缓冲,否则您将无法做到这一点。否则你会得到可怕的“无法修改标头信息 - 标头已发送”。

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

    启用缓冲区后,您的代码会更加灵活。

    【讨论】:

      【解决方案3】:

      输出缓冲并不是一个坏习惯。例如它可以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的话题。

      【讨论】:

      • 实际上对于某些浏览器你最好发送 header('Content-Length: '.ob_get_length());发送文本后,否则他们可能无法正确解码。对于一些古老的浏览器,但仍有百分之一的浏览器
      • 我猜你可能是对的。感谢您的信息:)
      【解决方案4】:

      为了程序效率,输出缓冲区捕获还不错。这是 PHP 的一个有用的特性。但是,它可以用于用其他方法更好地完成的事情。代码异味可能是一个问题,因此请确保没有更好、更清晰的解决方案来解决您的问题。

      【讨论】:

      【解决方案5】:

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

      我不认为使用它可以提高性能或加快页面加载速度,但这也取决于您使用的服务器以及您使用 php 作为 mod_php 还是 cgi 或 fastcgi。

      【讨论】:

        【解决方案6】:

        输出缓冲的主要缺点是不知道(或注意)你的缓冲堆栈有多深。将此与过于激进的错误处理或意外退出/终止的子例程相结合,您将丢失缓冲区中的任何内容,几乎没有关于正在发生的事情的线索。

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

        【讨论】:

          【解决方案7】:

          如果我没记错的话java也有这个输入输出缓冲来读写文件。

          【讨论】:

            【解决方案8】:

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

            我对 PHP 的了解还不够充分,无法判断这是否属实,或者当您不使用缓冲时它是否会释放内存,但这通常是理论。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-10-29
              • 1970-01-01
              • 2012-11-25
              • 1970-01-01
              • 2021-09-15
              • 2022-01-09
              • 2010-09-26
              相关资源
              最近更新 更多