php处理耗时任务,提高页面响应速度

转载自:http://www.madeby83.com/php%E5%A4%84%E7%90%86%E8%80%97%E6%97%B6%E4%BB%BB%E5%8A%A1%EF%BC%8C%E6%8F%90%E9%AB%98%E9%A1%B5%E9%9D%A2%E5%93%8D%E5%BA%94%E9%80%9F%E5%BA%A6.html
用户在访问一个web服务的时候,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。

而有的时候,我们根本不关心这些耗时的脚本的返回结果,但却还要等他执行完返回,才能继续下一步。
那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行?

这里分享一个办法,提高页面响应,提升用户体验

<?php
function step1()
{
    sleep(1);
}
 
function step2()
{
    sleep(5);
    file_put_contents('filename.txt', '耗时任务已完成');
}
 
/**
 * 结束输出缓冲数据
 * @return [type] [description]
 */
function finishRequest(){
    ignore_user_abort(true);            // 客户端关闭程序继续执行
    if(function_exists('fastcgi_finish_request')) {
        fastcgi_finish_request();   // 响应完成, 关闭连接。只在FastCGI有效
    } else {
        header('X-Accel-Buffering: no');    // nginx 不缓存输出
        header('Content-Length: '. strlen(ob_get_contents()));
        header("Connection: close");
        header("HTTP/1.1 200 OK");
        ob_end_flush();
        flush();
    }
}
 
step1();
echo "您的请求已完成";
finishRequest();
step2();

我们在处理step1逻辑的时候,主要任务就一完成。这时我可以先把结果返回给浏览器,告诉用户已完成。后面我继续处理耗时任务。
而不用等step2耗时任务处理完才告诉用户。提升用户体验

这里主要用利用php的缓存数据输出,将返回的数据提前返回到浏览器。

Related posts:

Leave a Reply

Your email address will not be published.