文档章节

使用fastcgi_finish_request提高页面响应速度

yusihuo
 yusihuo
发布于 2014/08/20 09:30
字数 483
阅读 275
收藏 6

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

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

    <?php
     
    echo '例子:';
    fastcgi_finish_request(); /* 响应完成, 关闭连接 */
     
    /* 记录日志 */
    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有些许的类似.

转载附言:  我看了下这个方法,  在调用的时候, 会发送响应, 关闭连接. 但是不会结束PHP的运行.  相比调用flush, 或者我之前介绍的加速你的Echo来说,  这个方法能更加干脆一些.

另外, 从代码的可移植性讲的话,  可以在代码中附上如下代码:

    if (!function_exists("fastcgi_finish_request")) {
          function fastcgi_finish_request() {
          }
    }


本文转载自:http://www.laruence.com/2011/04/13/1991.html

yusihuo
粉丝 3
博文 15
码字总数 2790
作品 0
成都
私信 提问
使用fastcgi_finish_request提高页面响应速度

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

龙鸟
2012/10/25
90
0
【PHP源码分析】FastCGI协议浅析

顺风车运营研发团队 陈雷 FastCGI 是一种协议,它是建立在CGI/1.1基础之上的,把CGI/1.1里面的要传递的数据通过FastCGI协议定义的顺序和格式进行传递。为了更好理解PHP-FPM的工作,下面具体阐...

陈雷_顺风车
2018/07/20
0
0
Nginx配置fastcgi cache

转载请注明文章出处: 在[尝试Ghost][1]中提到过托管博客的VPS由于内存不足导致服务宕机。今天意识到可以通过Nginx缓存避免请求落到PHP和MySQL端,提升整体性能。此外博客发布后很少改动,读...

tlanyan
2018/08/07
0
0
nginx 多域名配置

环境ubuntu16.04/nginx1.10/php7.0, 要配2个域名分别对应2个php项目(都是80端口), 在site-enabled ,目录下分别新建文件 www.a.com 和 www.b.com 2个独立文件,配置分别如下 server { lis...

sucanber
2018/05/29
3.3K
7
[转贴]实战 FastCGI

作 者: 许明彦 Abstract: 当网站日益走红,联机人数直线上升而心中暗自窃喜之时,突然客服中心涌来大批反应电话:『网站连不上去』、『按下去等好久画面才出来』、『一直出现 Server Too B...

zt371
2009/05/06
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部