建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网站开发 > PHP教程 >

神奇的fastcgi_finish_request

时间:2011-08-30 10:08来源:php100 作者: 点击:
  当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法。按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法。   听起来可能有些茫然,我们通过几个例子来说明一下: <?php &nb

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

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

  1. <?php  
  2.  
  3. echo '例子:';  
  4.  
  5. fastcgi_finish_request();  
  6.  
  7. echo 'To be, or not to be, that is the question.';  
  8.  
  9. file_put_contents('log.txt''生存还是毁灭,这是个问题。');  
  10.  
  11. ?> 

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

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

  1. <?php  
  2.  
  3. echo '例子:';  
  4.  
  5. file_put_contents('log.txt'date('Y-m-d H:i:s') . " 上传视频\n", FILE_APPEND);  
  6.  
  7. fastcgi_finish_request();  
  8.  
  9. sleep(1);  
  10. file_put_contents('log.txt'date('Y-m-d H:i:s') . " 转换格式\n", FILE_APPEND);  
  11.  
  12. sleep(1);  
  13. file_put_contents('log.txt'date('Y-m-d H:i:s') . " 提取图片\n", FILE_APPEND);  
  14.  
  15. ?> 

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

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

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片