使用 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() 。
使用输出缓冲区需要服务器将 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() 。