神奇的Fastcgi_Finish_Request
来源:互联网 发布:python运算符 编辑:程序博客网 时间:2024/06/04 19:55
fastcgi_finish_request
功能:
flush数据到客户端。调用这个方法后,再有任何输出内容,都不会输出到客户端。
应用场景:
如果一个请求的处理内容中,有一部分是不需要发送到客户端时,就可以先生成输出到客户端的内容,然后调用此方法。方法被调用后,内容就会输出到客户端。而不需要输出到客户端的内容,可以放在此方法后。这样可以提高响应速度。示例代码如下:
1
2
3
4
5
6
echo
"a"
;
fastcgi_finish_request();
echo
"b"
;
file_put_contents
(
"/tmp/test"
,
"bo56.com"
);
die
();
file_put_contents
(
"/tmp/b56"
,
"博学无忧"
);
页面输出结果为:a
可见,fastcgi_finish_request方法后的echo “b” 并没有输出到客户端。但是你会发现在/tmp/test目录下正常的创建了文件。但是/tmp/bo56文件没创建。
听起来可能有些茫然,我们通过几个例子来说明一下:
<?phpecho '例子:';fastcgi_finish_request();echo 'To be, or not to be, that is the question.';file_put_contents('log.txt', '生存还是毁灭,这是个问题。');?>
通过浏览器(不是命令行!)运行此脚本,结果发现并没有输出相应的字符串,但却生成了相应的文件。由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!
合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:
<?phpecho '例子:';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有些许的类似,但本质上完全不同,别混淆了。
0 0
- 神奇的fastcgi_finish_request
- 神奇的Fastcgi_Finish_Request
- 神奇的Fastcgi_Finish_Request
- 神奇的Fastcgi_Finish_Request
- 神奇的Fastcgi_Finish_Request
- fastcgi_finish_request() 遇到的坑
- fastcgi_finish_request
- Fastcgi_Finish_Request
- fastcgi_finish_request
- fastcgi_finish_request
- PHP在FastCGI模式时fastcgi_finish_request的妙用
- 非fastcgi模式实现fastCGI模式的fastcgi_finish_request()
- fastcgi_finish_request() 正确使用方式
- 神奇的的调色板
- 神奇的*号
- 一组神奇的图片
- 神奇的一天
- 神奇的预言
- PixelFormat(像素格式)以及view的高度getX(),getRawX()以及Path所用
- jdk自带线程池详解
- 装mysql 报错 Error Nr. 1045 解决方法
- HDU5762 Teacher Bo
- git tips
- 神奇的Fastcgi_Finish_Request
- 我在做大数据处理的时候,特别是在做数据处理,我貌似总是不注意大数据的思考
- 系统集成方案(一).NET集成方案
- MVC设计模式
- 顺序表应用3:元素位置互换之移位算法
- 关于C++中静态成员函数的理解
- nodejs的后端字符串验证器-validator
- 面试题55:字符流中第一个不重复的字符
- NYOJ722数独