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(唯一入口)的页面了,直到脚本执行完成才行。