我已经修改了我的 PHP 代码,以避免在发现它表示编码模式不佳后使用输出缓冲。但是仍然在不可避免地需要它的地方使用它。
但是,有些文章说使用输出缓冲是有益的,因为它将输出合并为一个,默认情况下输出被分解为 html 和标题,然后显示在浏览器上,但是输出缓冲消除了这种破坏过程,从而提高了速度输出显示给最终用户。
这篇文章的所有内容让我陷入了使用或完全避免输出缓冲的两难境地。我不确定它的工作方式和我提到的几点是否完全正确。所以请相应地指导我。
我已经修改了我的 PHP 代码,以避免在发现它表示编码模式不佳后使用输出缓冲。但是仍然在不可避免地需要它的地方使用它。
但是,有些文章说使用输出缓冲是有益的,因为它将输出合并为一个,默认情况下输出被分解为 html 和标题,然后显示在浏览器上,但是输出缓冲消除了这种破坏过程,从而提高了速度输出显示给最终用户。
这篇文章的所有内容让我陷入了使用或完全避免输出缓冲的两难境地。我不确定它的工作方式和我提到的几点是否完全正确。所以请相应地指导我。
有时使用输出缓冲是一件好事,但像很多人一样使用它(例如,不必在输出之前发送标头的懒惰方式)不是正确的时间。
你给出的例子,我不太了解,但如果它是最佳的,它可能是它很好用的时代之一。
它没有被禁止使用ob_start()
,它只是我之前所说的使用它 的“错误方式”。
您提到的优化感觉像是一个非常低级的优化,您可能会得到一点点“更快”的输出,但标准 php 脚本中通常有很多其他优化可以在此之前加速它,值得一看!
编辑: 在输出前不使用发送标头的小脚本示例与使用的小脚本示例:
<?php
$doOutput = true;
$doRedirect = true;
$output = "";
if($doOutput == true){
// $doOutput is true, so output is supposed to be printed.
$output = "Some output yay!";
}
if($doRedirect == true){
// but $doRedirect is also true, so redirect will be done.
header("location:anotherpage.php"); // This will not produce an error cause there was no output!
exit();
}
// The echo below will not be printed in the example, cause the $doRedirect var was true.
echo $output;
而不是(这种情况下会产生输出错误后发送的标头):
<?php
$doOutput = true;
$doRedirect = true;
if($doOutput == true){
//Output will be printed, cause $doOutput is true.
echo "Some output yay!";
}
if($doRedirect == true){
// but $doRedirect is also true, so redirect will be done.
header("location:anotherpage.php"); // This will produce an error cause output was already printed.
exit();
}
edit2:更新了一个更明显的例子!