影の域

关注web前端,追逐html5脚步,体会code人生

fastcgi_finish_request提速程序执行

| 14,523 点击

当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法。

不错的提速函数方法,针对页面生成完成后的任务执行可使用此方法。

例子:

<?php
echo '页面生成内容';
fastcgi_finish_request();
echo '看不到的生成内容,因为页面生成早已结束';
file_put_contents('test.txt', '页面虽已结束,但是任务仍旧正常继续运行');
?>

 

通过浏览器访问此PHP,由结果可说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时PHP剩余脚本代码却继续运行至最后。

 

合理利用这个特性可以大大提升用户体验及性能:

<?php
echo '给用户看的内容';
file_put_contents('test.txt', "页面生成完毕", FILE_APPEND);
fastcgi_finish_request();
sleep(5);
file_put_contents('test.txt', "任务A执行\n", FILE_APPEND);
sleep(5);
file_put_contents('test.txt', "任务B执行\n", FILE_APPEND);
?>

如预期,浏览时页面没有被堵塞,显示“给用户看的内容”并生成一条LOG记录后,请求就结束了。
而剩余的任务A 和 B,却依旧照常执行。

相关推荐