在php和jQuery中优化聊天室

在php和jQuery中优化聊天室,php,jquery,Php,Jquery,我有一个使用jQuery和php的聊天室 setInterval( function(){ if($('#session_container').children().length > 0){ if(localStorage['group_id']){ var group_id = localStorage['group_id']; var session_id = local

我有一个使用jQuery和php的聊天室

setInterval(
    function(){

        if($('#session_container').children().length > 0){
            if(localStorage['group_id']){
                var group_id = localStorage['group_id'];
                var session_id = localStorage['session_id'];
                var gsid = 'GSID' + group_id + session_id;
                $('#chatbox').load('php/chatbox.php', {'group_id' : group_id, 'session_id' : session_id}, 
                    function(){
                        $('#chatbox').find('tr:even').addClass('alt');
                        if($('#chatbox').children().length == 0){
                            localStorage.clear();
                            window.location.replace('chatro_main.php');
                        }
                    }
                );
            }else{

            }
        }
    }, 1000);
从上面的代码中可以看出,脚本每秒钟运行一次,我认为这是非常有攻击性的,而且我认为它也在浪费电源(当我运行这个脚本时,我的笔记本电脑的电池似乎消耗得更快)。有没有更好的办法。例如,当用户在浏览器窗口的另一个选项卡上时,不重新加载内容。或者,如果另一个用户发送消息,则只更新内容?
如果您知道另一种技术可以以更优化的方式实现这一点,您也可以提及。

事实上,这不是答案,但我无法对我的代表发表评论。我有过这样的聊天,但我有一个名为chatState的变量,当chatState为1(或true)时当有一段时间没有收到消息时,每秒钟触发一次间隔chatSate变为0(false),并清除该间隔并启动一个新的间隔,每10秒检查是否有人键入要聊天的内容?不确定这是否是一个好方法,但我认为这对于服务器来说会更好,因为请求更少,但正如我所说的,不确定这是否是一个好方法,所以这将是一个注释而不是答案。

对于这个问题,有几种可能的答案:

  • 不要使用
    setInterval
    ,而是反复使用
    setTimeout
    并调整超时。这个想法是,你首先每10秒尝试一次,如果没有动作,然后增加时间。所以间隔是:10,20,40,消息接收,10,20,消息接收,10。。。您必须调整实际增加超时的因素,以满足您的需要

  • 使用WebSocket实现它(参见@Christian Varga的评论)

  • 使用node.js作为服务器端语言,它可以与客户端javascript很好地交互。您可以让node.js向所有客户端广播消息,因此实际上您在那里有一个双向连接(我认为他们使用WebSocket和comet.js之类的后备功能,但我不确定,我只看到过一次)

  • .