PHP 彗星导致页面重新加载缓慢

PHP Comet cause page reload slow

本文关键字:新加载 加载 缓慢 PHP      更新时间:2023-09-26

嗨,我正在尝试用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);
    }

爪哇语

        $(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();
        })

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

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

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