2010-05-06 2 views
0

어떤 이유로 새로운 채팅 메시지를 확인하면 기대했던 것보다 많은 양의 브라우저 (어느 정도 서버)가로드됩니다. 누구나 내가 부하를 줄이기 위해 더 효율적으로 만들 수있는 방법을 본다.자바 스크립트 채팅 폴링 스크립트를보다 효율적으로 만들 수있는 방법은 무엇입니까?

// Begin the cycle of refreshing the mini chat after the standard delay. 
function startRefreshingMinichat(){ 
    var secs = 30; // Chat checking frequency. 
    setTimeout(function(){ 
     checkForNewChats(); 
     startRefreshingMinichat(); // Loop the check for refresh. 
    }, secs*1000); 
} 

// Check for the latest chat and update if it's different. 
function checkForNewChats(){ 
    // Check whether the latest chat doesn't match the latest displayed chat. 
    // NOTE THAT THIS CALLBACK DOES NOT TRIGGER IMMEDIATELY. 
    $.getJSON('api.php?type=latest_chat_id&jsoncallback=?', function(data){ 
     var newChats = false; 
     // Update global data stores if an update is needed. 
     if(updateDataStore(data.latest_chat_id, 'chat_id', 'latestChatId', 'chat_id')){ 
      newChats = true; 
     } 
     if(newChats){ // there are new chats to show. 
      refreshMinichat(null, 50); // loads new chat content. 
     } 
     // Since this callback isn't immediate, any feedback has to occur whenever the callback finishes. 
}); // End of getJSON function call. 
} 
+2

var secs = 1; : o) – jAndy

+0

오른쪽. : p 나는 이것이 그 문제의 일부라고 명시해야한다고 생각합니다. 나는 채팅을 더 자주 업데이트하기 위해 더 빠른 체크 타임을주고 싶지만 브라우저가 너무 많이 바뀌는 것 같다. (나는 그 자체로 측정 할 수는 없지만 서버로드에 대한 반향이 있다고 가정합니다.) – Kzqai

답변

1

체크 아웃 CometD을 확인하십시오. 그것은 jQuery와 통합 된 간단한 채팅 시스템에 성공한 js long-polling 시스템입니다. (마지막으로 살펴 보았을 때 몇 가지 jQuery 특정 구현이 있었지만 나를 위해 충분히 견고한 것을 찾지 못했습니다.)

+0

당신은 CometD를 사용하는 공개 코드를 가지고 있지 않을 것입니다 ... – Kzqai

1

this push engine을 사용하면 더 이상 새로운 데이터를 폴링하지 않아도됩니다. 정말 멋지다.

+0

또는 일반적으로 COMET으로 알려진 기술 : http://en.wikipedia.org/wiki/Comet_%28programming% 29 – RoToRa