神奇的Fastcgi_Finish_Request

转载 2013年12月03日 13:32:16

当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法。按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法。

听起来可能有些茫然,我们通过几个例子来说明一下:

<?php

echo '例子:';

fastcgi_finish_request();

echo 'To be, or not to be, that is the question.';

file_put_contents('log.txt', '生存还是毁灭,这是个问题。');

?>

通过浏览器(不是命令行!)运行此脚本,结果发现并没有输出相应的字符串,但却生成了相应的文件。由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!

合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:

<?php

echo '例子:';

file_put_contents('log.txt', date('Y-m-d H:i:s') . " 上传视频\n", FILE_APPEND);

fastcgi_finish_request();

sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 转换格式\n", FILE_APPEND);

sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 提取图片\n", FILE_APPEND);

?>

代码里用sleep模拟耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志。

末了给您提个醒,Yahoo在Best Practices for Speeding Up Your Web Site中提到了Flush the Buffer Early,也就是利用PHP中的flush方法把内容尽快发到客户端去,虽然表面上它和本文介绍的fastcgi_finish_request有些许的类似,但本质上完全不同,别混淆了。


相关文章推荐

神奇的Fastcgi_Finish_Request

当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行...

使用fastcgi_finish_request提高页面响应速度

使用fastcgi_finish_request提高页面响应速度

PHP在FastCGI模式时fastcgi_finish_request的妙用

当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法。按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行...
  • my_yang
  • my_yang
  • 2012年10月11日 15:34
  • 868

解决出现The FastCGI Handler was unable to process the request: 258 (0x80070102)的问题 等问题

10-02-04 11:10 微软去年底发布了II6的FastCGI模块,今天将服务器上的PHP支持改成了FastCGI,目前运行稳定.FastCGI的IIS模块可以让 流行的应用框架在I...
  • spl0000
  • spl0000
  • 2011年01月23日 13:15
  • 57077

Android 关于Activity的跳转和finish时切换页面动画实现

今天沈阳斌子在做APP时,客户的需求变更是在原有的程序上加入跳转页面的动画切换,类似IPhone的左出右进的方式,返回时是相反的效果。我知道用两种方式可以实现这样的效果,一种就是通过在startAct...

Android 向右滑动销毁(finish)Activity, 随着手势的滑动而滑动并跳转的效果(二)

写这篇文章是因为看了:http://blog.csdn.net/jdsjlzx/article/details/21231217这篇文章,并下载了demo运行了下。 现对其做了一些修改: (1) 不在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:神奇的Fastcgi_Finish_Request
举报原因:
原因补充:

(最多只允许输入30个字)