PHP:在服务器上使用输出缓冲有缺点吗?

PHP:在服务器上使用输出缓冲有缺点吗?,php,.htaccess,output-buffering,Php,.htaccess,Output Buffering,如果我在.htaccess文件中将output\u buffering设置为on,是否存在任何缺点 我总是建议我的学生关闭它,并确保您的代码不会在错误的时间输出空白,并且可能再次打开它只是为了安全 文档中并没有真正讨论您为什么会或不会使用此功能。所以,其他问题讨论如何使用它,而不是它是否会导致自身问题。我知道如果PHP作为CGI运行,就不能使用此功能 输出缓冲既有优点也有缺点。其主要优点显然是,您可以在不调用响应头的情况下缓冲输出。主要的缺点是,客户机在收到服务器的响应之前,将等待填充输出缓冲区

如果我在
.htaccess
文件中将
output\u buffering
设置为
on
,是否存在任何缺点

我总是建议我的学生关闭它,并确保您的代码不会在错误的时间输出空白,并且可能再次打开它只是为了安全


文档中并没有真正讨论您为什么会或不会使用此功能。所以,其他问题讨论如何使用它,而不是它是否会导致自身问题。我知道如果PHP作为CGI运行,就不能使用此功能

输出缓冲既有优点也有缺点。其主要优点显然是,您可以在不调用响应头的情况下缓冲输出。主要的缺点是,客户机在收到服务器的响应之前,将等待填充输出缓冲区或刷新输出缓冲区所需的时间。这意味着在这种情况发生的同时,最终用户正盯着一个空白的白色屏幕。这也可能会影响生产环境中的某些遥测指标,如TTFB(到第一个字节的时间)或UA呈现。请记住,UA实际上可以在后台获取CSS、JS和其他资产,同时从服务器等待HTML的其余部分。这称为流处理。大多数现代浏览器都是通过在DOM流入时处理DOM块来实现的,而不是等待整个响应开始呈现页面

这就是为什么大多数人会将CSS放在HTML的
部分,以便浏览器立即开始获取和构建内容接收器。在浏览器中,呈现引擎对CSS和HTML进行单独的解析。HTML进入DOM解析器,CSS进入CSS解析器。此外,JS会转到JS引擎,但这可能会导致一些渲染阻塞操作(这就是为什么大多数JS通常在DOM末尾加载,因为它通常需要访问完整的DOM)

这是浏览器通常在客户端UA中呈现页面的方式:

因此,有时需要尽快将响应发送到客户端,尤其是在移动设备中,由于硬件限制,渲染操作通常比桌面设备慢


考虑这样一个场景,您正在代码中执行类似的操作:

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="/your.css">
    </head>
    <body>
    <h1>Title</h1>
<?php
$pdo = new PDO($dsn);

$data = $pdo->query(/* do complicated long-running query here */);

// This blocks further stream processing on the client-side here

// Then db result comes back and we continue printing

foreach ($data as $row) {
    echo "$row[1], $row[2]...etc...";
}
?>
    </body>
</html>

标题

在客户端部分呈现内容对于用户体验非常重要。虽然这可能不是你的具体情况,但它通常被认为是重要的。因此,任何可能需要在后端花费一些时间的操作最好推迟,以便在客户端呈现尽可能多的内容。

这是否回答了您的问题@不,我知道什么是输出缓冲,我经常手动使用。如果你知道它是什么,那么你就知道它的优点和缺点。@Cypher我不同意你在这里的断言。知道一件事情的功能并不一定意味着知道它在现实世界环境中的所有副作用和相互作用。曼戈问了一个完全合理的问题。@Cypher我已经回答了这个问题。此外,报复性投票实际上是被禁止的,所以你要知道。