我有一个脚本,可以用一个字符串 ($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/