输出缓冲的优缺点是什么?

时间:2011-04-19 11:58:02

标签: php output-buffering

我在很多使用

的网站上看过
ob_start(); 

可以增强页面加载时间,因为它将php存储在一个变量中并一次显示它而不是稍微处理php。

它对

非常有用
header('location: /');

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

您对使用它有什么想法,以及您设置为输出缓冲的内容,对于我应该或不应该使用它的方式,时间和原因有利有弊。

3 个答案:

答案 0 :(得分:6)

This question对该主题有一些非常好的评论

答案 1 :(得分:1)

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

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

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

    1. 开始缓冲
    2. 连接数据库
    3. 输出一些东西
    4. 关闭数据库连接
    5. 将缓冲区发送给用户。
    6. 当您的脚本需要连接100ms到数据库并且您的用户需要300多个才能下载它时,您可以了解输出缓冲如何帮助释放对数据库连接限制的压力。

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

答案 2 :(得分:-1)

有些用户不熟悉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"> 

如果你真的需要使用标题功能,你必须不发送任何输出(不要忘记输入字符或空格或输出UTF-8签名)