php - 回显内容有时需要很长时间

标签 php performance

我有一个脚本,可以用一个字符串 ($content) 构建我的网页,然后将其回显给用户。

我的脚本如下所示:

$time1= microtime(true);
$content = create_content();
$content_time=(microtime(true)-$time1)

$time = microtime(true);
echo $content;
$echo_time = (microtime(true)-$time);

现在 $content_time 始终远低于 0.5 秒,所以没问题。然而,每天有几次 $echo_time 远高于 1 秒,甚至可能长达 15 秒。内容并不是很大,大约10-20kb,而且发生的时间完全随机,所以不是在繁忙时间,甚至发生在半夜。

有人知道那是什么吗?

编辑 该站点托管在(远程)专用服务器上,并且仅托管该站点。这里涉及到一个数据库,但就像我说的 $content_time 远低于 1 秒,所以这个函数所做的不可能是延迟。

当我的网站时间超过某个值(比方说 5 秒)时,我会记录此信息。即使 Googlebots 有时似乎也会遇到这些问题,所以我认为他们不使用拨号连接:)

最佳答案

让我们缩小问题范围并排除一些因素......

在问题中,您表明您正在回显 10-15kb。无论它如何缓冲输出,这都是一个很大的量 - 请记住 php 是单线程,一旦刷新缓冲区,您就必须等待所有输出通过 shell 或 HTTP 发生,然后脚本才能继续。在继续回显之前,它最终必须刷新内部缓冲区。在没有 echo 刷新开销的情况下获得美好时光

尝试更换

$time = microtime(true);
echo $content;
$echo_time = (microtime(true)-$time);

ob_start();
$time = microtime(true);
echo $content;
$echo_time = (microtime(true)-$time);
ob_clean();

这将回显到缓冲区,但实际上不会通过 HTTP 或其他方式将其吐出。这应该为您提供 echo 命令的“实时”时间,而不必担心发送缓冲区中的内容。

如果 echo_time 缩短,则需要通过缓冲来尽可能解决传输问题。

如果 echo_time 仍然太大,您需要开始深入研究 PHP C 代码。

无论哪种方式,您都更接近找到问题和解决方案

关于php - 回显内容有时需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711798/

相关文章:

php - 如何使用ajax一键插入两行Laravel

c++ - 乘法比浮点除法快吗?

performance - Firebug net 选项卡报告的页面接收时间长(页面加载缓慢)

performance - Java 8 并发 HashMap 获得性能/替代方案

jquery - 在所有浏览器中缓存 jQuery REST Ajax 响应

python - 在 Python 中解析大型 XML 文档的最快方法是什么?

php - PDF 缩略图总是使用 Imagick 生成为灰度

javascript - 使用 PHP 替换 Js 变量名称

javascript - ajax 中的警报甲酸盐没有得到响应

php - 显示内联 block ,它在 HTML 中工作但在 PHP 中不工作(我在数据库中获取值)