롱 폴링 (jQuery의 ajax 기능 사용)을 사용하여 서버에서 클라이언트로 일정하거나 지속적으로 업데이트를 보내는 webapp (파이어 폭스 호환 가능)를 작성 중입니다. 하루 종일 또는 오랜 시간 동안이 작업을 종료 상태로 두는 것에 대해 우려하고 있습니다. 기본적인 코드 골격이 있습니다 :롱 폴링 Ajax 성능 개선
function processResults(xml)
{
// do stuff with the xml from the server
}
function fetch()
{
setTimeout(function()
{
$.ajax({
type: 'GET',
url: 'foo/bar/baz',
dataType: 'xml',
success: function (xml)
{
processResults(xml);
fetch();
},
error: function (xhr, type, exception)
{
if (xhr.status === 0)
{
console.log('XMLHttpRequest cancelled');
}
else
{
console.debug(xhr);
fetch();
}
}
});
}, 500);
}
(. 클라이언트가 업데이트를 신속하게 클라이언트로 다시 오는 경우 서버 망치하지 않도록 "절전는"0.5 초이다 - 그들은 일반적으로있는)을
밤새이 실행을 떠나고 나면 Firefox를 크롤링하는 경향이 있습니다. 나는 기본적으로 무한 재귀 함수를 작성했기 때문에 이것이 부분적으로 큰 스택 깊이로 인해 발생할 수 있다고 생각했습니다. 그러나 Firebug를 사용하여 fetch
에 중단 점을 던지면이 경우가 아닌 것처럼 보입니다. Firebug가 보여 주었던 스택은 한 시간 만 지나도 4 ~ 5 프레임 정도의 깊이입니다.
내가 생각하고있는 솔루션 중 하나는 반복적 인 함수로 재귀 함수를 변경하는 것이지만 AYax 요청 사이에 지연을 삽입하는 방법을 알아낼 수는 없습니다 회전하지 않고. 나는 JS 1.7 "yield" keyword을 보았습니다.하지만 여기에 내 머리가 무엇인지 알기 위해 머리를 감쌀 수 없습니다.
매시간 한 번 주기적으로 페이지를 정기적으로 새로 고치는 것이 가장 좋은 해결책입니까? 8 시간 또는 12 시간 동안 실행 한 후에도 브라우저에 상처를주지 않는 더 나은 /보다 가벼운 긴 폴링 디자인 패턴이 있습니까? 아니면 서버의 응답 빈도를 보통 알고 있기 때문에 긴 폴링을 건너 뛰고 다른 "상수 업데이트"패턴을 사용해야합니까?
그게 나를 도와 줘 !! – JulienFr