7

我在许多使用的网站上阅读过

ob_start(); 

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

它也非常有用

header('location: /');

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

您对使用它有什么想法,以及您将什么设置为输出缓冲,对于如何、何时以及为什么我应该或不应该使用它是否有利弊。

4

3 回答 3

6

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

于 2011-04-19T12:00:14.833 回答
1

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

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

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

你有:

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

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

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

于 2011-04-19T12:29:50.033 回答
-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"> 

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

于 2011-04-19T12:04:46.247 回答