02
08月
2020
应用场景:
如果一个方法耗时较长,可以先返回客户端或页面需要的数据,再进行后续的操作。
thinkphp/library/think/Response.php
/** * 发送数据到客户端 * @access public * @return void * @throws \InvalidArgumentException */ public function send() { ...... if (function_exists('fastcgi_finish_request')) { // 提高页面响应 fastcgi_finish_request(); } ...... }
使用fastcgi_finish_request()函数后,会立即返回,可以不用等待后续操作,提高页面响应速度。
缺点:
fastcgi_finish_request 虽然能够加速页面响应速度,但是由于程序可能有后续处理,会占用 php-fpm 的一个进程,那么当某一个请求被分配到这个请求上时,就必须等待其结束,这可能造成阻塞,如果脚本执行时间长,在执行结束之前,触发此事件的机器,无论切换浏览器,再也打不开执行相同 php(唯一入口)的页面了,直到脚本执行完成才行。