一个大的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"
Run Code Online (Sandbox Code Playgroud)
这是将生成的代码刷新到浏览器的语句:
print str_pad('',4096)."\n";
ob_flush();
flush();
Run Code Online (Sandbox Code Playgroud)
什么可能导致这个问题?
您只能提示:flush()
将其发送到 apache/webserver,它可以缓冲/等待,将其发送到具有任意数量可以缓冲/等待的代理的网络,最终到达您的浏览器,浏览器也可以决定缓冲/等待。如果您不想处理所有这些令人头疼的问题,请选择异步方法。Gearman 让它变得非常简单,但当然不是绝对必要的。
归档时间: |
|
查看次数: |
473 次 |
最近记录: |