【问题标题】:What are the pros and cons of output buffering?输出缓冲的优缺点是什么?
【发布时间】:2011-04-19 11:58:02
【问题描述】:

我在很多网站上阅读过使用

ob_start(); 

可以提高您的页面加载时间,因为它将 php 存储在一个变量中并一次性显示它,而不是一次处理 php。

它也非常有用

header('location: /');

有人说这是意大利面条代码,但只要代码对任何程序员来说都是清晰简洁的,那么这应该不是问题,对吧?

你对使用它有什么想法,你将什么设置为你的输出缓冲,我应该或不应该如何、何时以及为什么使用它有什么优点和缺点。

【问题讨论】:

  • 关于第二个问题部分:Is it "OK" to have "ob_start()" in the beginning of all PHP pages? - 如果其目的只是为了防止标头已发送错误,则它被广泛认为是 hack。但是,这是一个功能性黑客。请注意,可靠性取决于 PHP 是否隐式刷新(默认缓冲区大小可能取决于 php.ini 设置)。

标签: php output-buffering


【解决方案1】:

This question对这个话题有一些很好的评论

【讨论】:

    【解决方案2】:

    输出缓冲的主要优点是您可以将它与 ob_gzhandler 一起使用,它会压缩您的输出,因此您可以使用更少的带宽。如果您的服务器未设置为发送压缩的 php 文件,则可以使用。

    另一个优点是,如果您的脚本使用数据库或其他受限资源,并且您在关闭连接或释放这些资源之前有一些输出。而不是这种东西:

    1. 连接数据库
    2. 开始向用户发送输出
    3. 等待用户接收所有内容
    4. 关闭数据库连接

    你有:

    1. 开始缓冲
    2. 连接数据库
    3. 输出一些东西
    4. 关闭数据库连接
    5. 将缓冲区发送给用户。

    当您的脚本需要与数据库连接 100 毫秒,而您的用户需要再下载 300 毫秒时,您可以了解输出缓冲如何帮助释放对数据库连接限制的一些压力。

    我知道使用配置良好的服务器编写好的代码可能会抵消这些优势,但你永远不知道谁会在你之后编写代码,而且你并不总是可以控制运行它的服务器。

    【讨论】:

      【解决方案3】:

      有些用户不太了解 php。所以他们错误地使用了 ob_start。

      如果您使用 header()、cookie()、session 等标头函数,则不必发送任何输出。这些函数必须在输出之前使用。

      但有些用户使用 ob_start 或输出缓冲功能停止发送输出。

      因此您可以使用 javascript 或元转发来转发用户。

      <script language="javascript"> window.location = 'some.php'; </script>
      

      或者您可以使用元刷新来转发用户。

      <META HTTP-EQUIV="Refresh" CONTENT="0;URL=some.php"> 
      

      如果你真的需要使用 header 函数,你必须不要发送任何输出(不要忘记输入字符或空格或 UTF-8 签名也是输出)

      【讨论】:

      • -1 - 使用ob_start 作为防止输出被发送的方法并没有错。但是,通常情况下,它可能会影响性能并意味着您的代码中存在分层问题。
      猜你喜欢
      • 2012-06-02
      • 2021-04-08
      • 2014-01-24
      • 2011-07-12
      相关资源
      最近更新 更多