使用fastcgi_finish_request提高页面响应速度

当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() {
          }
    }

使用fastcgi_finish_request提高页面响应速度

时间: 2024-10-05 12:39:30

使用fastcgi_finish_request提高页面响应速度的相关文章

Fastcgi_Finish_Request 提高页面响应速度

当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(

深入浅出Symfony2 - 如何提高网站响应速度 [转]

简介 Symfony2是一个基于PHP语言的Web开发框架,有着开发速度快.性能高等特点.但Symfony2的学习曲线也比较陡峭,没有经验的初学者往往需要一些练习才能掌握其特性.相对其他框架,Symfony2比较吸引人的特点有: 支持DI(Dependency Injection,依赖注入)和IoC(Inversion of control). 高性能. 扩展性强. 文档成熟.拥有成熟的社区支持. 本文通过对一个基于Symfony2框架所开发的网站页面进行逐步优化,最终实现页面加载速度的提高的例

Android性能优化之提高应用响应速度(了解ViewStub和推迟视图的初始化)

为什么需要推迟视图初始化 这里谈谈为什么要推迟视图的初始化. 假设这样一个情况, 如果手机的界面包含大量的视图组件,而且数据大多都来源于服务器. 这就意味着一进入这个界面,应用就会在onCreate()方法中去初始化为数不少的layout资源, 而初始化View是一个比较耗时耗资源的操作. 然后, 应用进行几个网络链接,去获取数据回来更新填充View中的各个组件. 这样算起来, 用户从进入某个Activity, 到真的看到该Activity的视图, 所需等待的时间确实不短.  而且要知道, 应用

提高页面加载速度的方法

提高页面加载速度的方法有如下几个方面:(一)减少HTTP强求(1)增加并行连接(2)合并资源文件:将多个小的css还有javascript文件进行合并成一个大文件,这样页面在加载页面的相关资源的时候,就会减少HTTP的请求,从而加快页面的加载速度(3)使用CSS sprite:将整个网站上所有共用的小图片都合成一张图片,然后使用background-position进行控制所需要的图片位置.原理是虽然每次只是使用了一张小图片,但是整个图片都已经被保存到了缓存中,这样每次使用就不需要再去请求图片

jquery实现图片预加载提高页面加载速度

使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图片的加载速度,这的确是个好方法,不过有时候我们也可以从前台找一些解决的 方法.下面我来介绍一种在实际应用中经常会使用到的js预加载的方法. 首先在输出图片的时候我们做一些处理 处理完html我们开始写js了,在这里我使用了jquery的类库

Web前端性能优化——如何提高页面加载速度

前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒,99%的用户会关闭这个网页.也许这样讲,各位还不会有太多感触,接下来我列举一组数据:Google网站访问速度每慢400ms就导致用户搜索请 求下降0.59%;Amazon每增加100ms网站延迟将导致收入下降1%;雅虎如果有400ms延迟会导致流量下降5-9%.网站的加载速度严重影响了用户

【转】Web前端性能优化——如何提高页面加载速度

前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒,99%的用户会关闭这个网页.也许这样讲,各位还不会有太多感触,接下来我列举一组数据:Google网站访问速度每慢400ms就导致用户搜索请 求下降0.59%;Amazon每增加100ms网站延迟将导致收入下降1%;雅虎如果有400ms延迟会导致流量下降5-9%.网站的加载速度严重影响了用户

使用register_shutdown_function触发写日志,使用fastcgi_finish_request提高响应速度

公司内部的市场管理系统,一直是我一个人维护,最近老是有开发埋怨,内网的账号被人改了密码,账号被解绑了...哈的,错在这还不是一个完整的系统,既没有严格的权限也没有做操作日志呀... 权限现在是准备做在下一阶段的的API网关项目里面做统一的管理,想着还是先把操作日志做起来吧. 系统框架使用的Think PHP 5,查了一下文档,http://www.kancloud.cn/manual/thinkphp5/135195,模型是支持事件的,于是计划是这样,通过模型的事件触发记录日志的动作. 看了一下

Nginx开启Gzip压缩提高页面加载速度

本文转自http://www.veryhuo.com/a/view/51706.html,如有侵权,请及时联系转载人删除! 在实际运维中,为了提高web页面的访问加载速度,一般会把静态资源(比如js.css.img等)在服务器进行压缩再传输到客户浏览器,主要配置步骤如下: 环境:Centos 1.Vim打开Nginx配置文件 vim /etc/nginx/nginx.conf 2.找到如下一段,进行修改 gzip on; // 开启Gzipgzip_min_length 1k; // 不压缩临界