使用 ob_start() 是次优的(未优化)并且它填​​满了 ram?

using of ob_start() is suboptimal (not optimized) and it fills the ram?

使用输出缓冲区需要服务器将 PHP 的全部输出存储在 RAM 中,所以如果我有一个大页面,我会结束使用相当多的内存 - 服务器还必须等到整个页面生成后再发送出去,这可能会导致小的延迟。是吗?

我不想知道使用 ob_start(); 的优势。我的问题是 重定向 和这个错误: Headers 已经发送 .

所以为了解决这个问题,我在我的代码中使用了ob_start();。像这样:

<?php ob_start(); ?> 
<?php
       // 500 lines of code is here
       header(Location: www.example.com/test.php);
?> 
<html> 
      // 1000 lines of code is here
</html> 
<?php ob_end_flush(); ?>

现在我的问题已经解决了,只是我想知道一切都好吗?我的代码优化了吗?如果我的请求增加,我的网站不会延迟?

谢谢

"Headers already sent" 问题的正确解决方案是 described in a previous thread

基本上,正确的操作原因是将 所有 处理代码移动到浏览器的任何输出之上。然后根据需要简单地在 HTML 代码之间回显结果。
您不仅会注意到页面的资源使用情况有所改善,而且您还会注意到实际阅读和编写代码会变得更加容易。

如果输出分支足够复杂,这意味着除了非常基本的脚本(简单的留言簿等)之外的任何东西,模板引擎可能非常值得花时间和精力去研究。

经常使用输出缓冲,我不会担心这个。例如,这个 SO 网页占用 ~ 64 KiB,这意味着这些页面中的 16384 个同时适合 1 GiB ram。

可能是题外话,但是如果您要发送一个位置 header,您还需要执行所有其他代码吗?您可以立即发送 header 和 exit() 。