使用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有些许的类似.

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

 代码如下 复制代码
if (!function_exists("fastcgi_finish_request")) {
      function fastcgi_finish_request() {
      }
}

不会造成代码部署在非fpm环境下造成问题.

时间: 2024-09-20 06:31:22

使用fastcgi_finish_request实现后台异步处理及提高页面响应速度的相关文章

如何提高页面响应速度

中介交易 SEO诊断 淘宝客 云主机 技术大厅 访问速度缓慢的互联网已经成为过去,但页面能瞬时呈现也只是未来才会发生的事情. Christian heilmann的一些技巧,现在就可以令你的网站访问起来更为流畅. 页面首次访问时的延时是网站和Web应用设计中遇到的一个很重要的问题.用户总是感觉页面相应的不够快. 为什么用户会有这样的感觉?也许用户还保留多年前那种按分钟计费的接入网方式的使用习惯(现在的饭店或机场还保持那种接入方式):也许是因为用户觉得页面要有足够快的响应才能称得上所谓的信息高速路

java后台异步推送消息至服务器(mqtt paho)

问题描述 java后台异步推送消息至服务器(mqtt paho) web创建消息推送保存至数据库后,后台从数据库获取数据并异步推送:即每次获取一条数据推送,推送成功后再获取第二条数据推送,依此类推,当没有数据时处于睡眠状态.我该怎么实现. 解决方案 wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

提高页面的浏览量,打造杀手级标题

文章描述:做个全能设计师!教你写作并设计出一个杀手级标题 怎样才能让网页设计中的标题一语中的.直击要害呢? 无论是浏览微博,还是阅读RSS内容,或是Google搜索,你最先注意的,往往是那些标题出众,饱含噱头的信息(也有同学习惯称 "标题党" ) 好的标题能够吸引你的注意,让你决定阅读一番文章,而糟糕的标题,让人看都不想看,扫一眼便略过去了. 换句话说,很多情况下,标题决定着阅读量,只要标题好,用户才会注意,进而主动关注内容.如果标题不到位,那么无论文章质量多么上乘.产品多么优秀,依然

CSS3 will-change提高页面滚动、动画等渲染性能

一.先来看一个例子 下面这个例子来自某外文,我这里简单转述下. 视差滚动现在不是挺流行的嘛,然后Chris Ruppel当其使用background-attachment: fixed实现背景图片不随滚动条滚动而滚动效果的时候,发现,页面的绘制性能掉到了每秒30帧,这种帧频人眼已经可以感觉到一定的顿挫感了. 后来,参考一些其他同事还是同行的建议,做了一番优化,然后,页面的渲染性能-- 这优化之前完全就是便秘,屎拉不出来的感觉:而优化之后,完全就是一泻千里,裤子都来不及脱的感觉. 一兄得便秘,在厕

SEO之提高页面加载速度手把手教程

一直以来,提高页面的加载速度都被百度和谷歌认可影响网站排名的,但这个如何做呢,估计不少朋友并不了解现在出一个手把手的教程吧,首先得用火狐浏览器,然后下载插件fiebug, ,page speed,然后就可以进行测试了.你可以明确的发现自己网站中有那些因素在影响页面打开的速度. 首先上一张图片,是我们自己的电影站进行的测试 大家看到了.一共有三个主要的原因和三个次要的原因,我们先从简单的说起吧,首先那个启用keep-alive,因为我用的是win2003+iis,这个默认是启用了,如下图. 在ii

掌握HTML语言的核心知识 提高页面代码修改效率

做网站,HTML语言看似不重要,其实,恰恰越是基础的知识越是重要.站长做网站往往直接去网上下载一个CMS系统,然后上传安装便是,对于代码部分的修改却束手无策.其实方面的知识不难,只要我们平时多多地关注,多看一些相关的教程知识,相信对HTML语言会很快入门. 在这里,我简单地讲几个关键点,HTML语言的规则是由一对对的标签组成的,比如就是其中一种标签,< /html>所有的HTML页面都是由这样的形成构成的,当然其中还有其他的很多的标签对,大部分的标签只要有开始标签,就有结束标签,当然少数的标签

用innerhtml提高页面打开速度的方法

这篇文章介绍了用innerhtml提高页面打开速度的方法,有需要的朋友可以参考一下   查看源代码,可以发现,页首的登陆代码位置,只有一行 复制代码 代码如下: <div id="headtop"></div> 而flash幻灯的位置,也只有一行 复制代码 代码如下: <div id="index_slide"></div> 对于这种需要耗时的代码,最好是放在页面最后面加载,然后用innerhtml的方法加载到对应位置

javaee-ajax提交后台action后,怎么让后台action中跳转页面

问题描述 ajax提交后台action后,怎么让后台action中跳转页面 由于之前用jquery的submit事件提交表单时,ckeditor中的内容提交不了 $("#sendmail").submit(); 所以我换了ajax提交,a但是现在ajax提交有一个问题.我需要的是表单提交到action中, action中进过struts,跳转到对应的成功界面,但是由于ajax,我action中 的功能实现了,就 是不能进行跳转,界面一直显示发送中,想请问一下各位这是怎么回事. 我期望发

spring mvc-SpringMVC 后台怎么获取前台jsp页面中file中的文件。

问题描述 SpringMVC 后台怎么获取前台jsp页面中file中的文件. 把file中的Excel文件提交,后台该如何获取这个Excel文件. 解决方案 SpringMVC默认是关闭fileupload功能的,开启该能够并验证文件上传,需要做如下几件事情: 第一:打开SpringMVC的文件上传功能: ***-servlet.xml中配置: <bean id="multipartResolver" class="org.springframework.web.mul