一个大型 php 脚本使用刷新将生成的 html 的一部分发送到浏览器,同时它正在执行脚本的大部分,这需要大约 20 秒。
刷新后执行的脚本部分非常大,并且占用了服务器保留(90% CPU(的大量资源。
每 5 次页面保持白色(白色(,这意味着刷新没有到达以发送显示页面正在加载的图像。当程序完成时,页面也会保持白色(浏览器指示它仍在加载(,并且应该将整个页面发送到浏览器。
出色:当我按下后退按钮时,整个页面将显示(应该在执行整个脚本后加载到浏览器中(一秒钟,然后浏览器返回到上一页。
所有其他 4 次页面加载良好。php 脚本的输入在所有 5 次中都是相同的。
我的 .htacces 文件中有这些设置:
addhandler x-httpd-php5-cgi .php5
addhandler x-httpd-php5-cgi .php5
addhandler x-httpd-php5-cgi .php5
Header Set Cache-Control "max-age=0, no-store"
这是将生成的代码刷新到浏览器的语句:
print str_pad('',4096)."'n";
ob_flush();
flush();
可能导致此问题的原因是什么?
你只能提示:flush()
将其发送到 apache/webserver,它可以缓冲/等待,它会用任意数量的代理将其发送到网络,这些代理可以缓冲/等待,最终进入您的浏览器,浏览器也可以决定缓冲/等待。如果您不想处理所有这些令人头疼的问题,请选择异步方法。Gearman使它变得非常简单,但当然不是绝对必要的。
print str_pad('',4096)."'n";
您是否注意到您正在重复一个空字符串?也许你的意思是
print str_pad(' ',4096)."'n";
该语句的目的是因为某些 Web 浏览器在收到一定数量的字节或响应完成(以先到者为准(之前不会呈现页面。