PHP Comet导致页面重新加载缓慢

时间:2013-10-31 10:52:58

标签: javascript php jquery ajax comet

您好我要用PHP和jquery来实现这个彗星。彗星是在每个页面加载时启动的。然而它导致网站中任何页面的加载变得非常慢,就像10秒一样,它似乎在等待前一个服务器请求死()if($ elapse> 10) 但是如果一个ajax连接连接被中止,PHP不应该停止执行吗?知道为什么重新加载页面会变慢吗?

function getPendingCheckin()
    {
        ignore_user_abort(false);
        $iCreatedDate =  $this->input->post("iLastCreateDate");

        $aCheckin = [];
        $prev = time();
        while(! $aCheckin )
        {
            $aCheckin = $this->getData();

            if($aCheckin || connection_aborted() == 1)
            {
                break;
            }
            else
            {
                sleep(1);
                $elapse = time() - $prev;
                if($elapse > 10)
                {
                    die();
                }
            }
        }

        header('Content-type: application/json');
        echo json_encode($aCheckin);
    }

的Javascript

        $(window).ready(function(){
             var iLastCreateDate =  $('#iLastCreateDate').val();

             function startGetPendingCheckin()
             {
                    $.ajax({
                       type: "POST",
                       url: "/kc/comet/getPendingCheckin",
                       data: 'iLastCreateDate=' + iLastCreateDate,
                       error : function(msg)
                       {
                           //alert("Error get pending checkin");
                       },
                       success :function(o)
                       {
                           if(o)
                           {
                               //process data
                           }

                           startGetPendingCheckin();
                       }
                   });
             }

            startGetPendingCheckin();
        })

1 个答案:

答案 0 :(得分:0)

不,php执行不会(总是)中止。我注意到在本地机器上运行的重型脚本上。

由于未关闭会话,您可能无法对php脚本运行2个并行请求。通常在脚本终止后自动关闭。使用默认行为(可锁定文件中的会话,无需手动关闭),不可能有来自同一用户的2个同时请求 - 后者将被前者阻止并等待其终止。

只要您检查了有关用户授权的所有内容,就可以关闭会话。