在php和jQuery中优化聊天室
我有一个使用jQuery和php的聊天室在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
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。。。您必须调整实际增加超时的因素,以满足您的需要