首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在上使用output_buffering有什么缺点吗?

在上使用output_buffering有什么缺点吗?
EN

Stack Overflow用户
提问于 2020-02-21 09:21:44
回答 1查看 151关注 0票数 2

如果我在我的.htaccess文件中将output_buffering设置为on,有什么缺点吗?

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

文档并没有真正说明为什么你会使用或者不会使用这个特性。其他SO问题讨论如何使用它,但不讨论它是否会导致自身的问题。我知道如果PHP作为CGI运行,你就不能使用这个特性。

EN

回答 1

Stack Overflow用户

发布于 2020-02-21 09:52:52

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

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

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

因此,有时尽快将响应发送到客户端是可取的,尤其是在移动设备中,由于硬件限制,呈现操作通常比桌面设备慢。

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

代码语言:javascript
运行
复制
<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>

客户端内容的部分呈现对于用户体验很重要。虽然这对你来说可能不是特别的情况,但它通常被视为重要的。因此,任何可能在后端花费一些时间的操作都应该被推迟,以便在客户端呈现尽可能多的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60330882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档