一个大的php脚本使用flush将生成的html的一部分发送到浏览器,同时执行脚本的大部分需要appr。 20秒
刷新后正在执行的脚本部分相当大,从服务器预留(90%cpu)中占用很多。
一旦进入5次页面保持空白(白色),这意味着刷新没有到达发送显示页面正在加载的图像。当程序完成时,页面保持空白(浏览器指示它仍在加载),并且应该将整个页面发送到浏览器。
显着的: 当我按下后退按钮时,整个页面将显示(应该在执行整个脚本后在浏览器中加载)一秒钟,然后浏览器返回上一页。
所有其他4次页面加载良好。所有5次PHP脚本的输入都是相同的。
我在.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();
可能导致此问题的原因是什么?
答案 0 :(得分:2)
你只能提示:flush()
将它发送到apache / webserver,它可以缓冲/等待,它将任意数量的代理发送到网络,这些代理可以缓冲/等待,最终会在你的浏览器,也可以决定缓冲/等待。如果你不想处理那些令人头疼的问题,那就选择异步方法。 Gearman让它变得非常简单,但当然不是绝对必要的。
答案 1 :(得分:2)
print str_pad('',4096)."\n";
你注意到你重复一个空字符串吗?也许你的意思是
print str_pad(' ',4096)."\n";
该声明的目的是因为某些Web浏览器在收到一定数量的字节或响应完成之前不会呈现页面,以先到者为准。