Я пишу webapp (Только для Firefox только), который использует длительный опрос (с помощью возможностей ajax jQuery) для отправки более или менее постоянных обновлений с сервера клиенту. Меня беспокоят последствия ухода из этого режима в течение длительных периодов времени, скажем, весь день или ночь. Основной скелет кода заключается в следующем:Улучшение производительности 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);
}
(. Половина второго «сна» так, чтобы клиент не забивают сервер, если обновления возвращаются клиенту быстро - что они, как правило)
После того как вы оставите это на ночь, он имеет тенденцию делать сканирование Firefox. Я думал, что это может быть частично вызвано большой глубиной стека, поскольку я в основном написал бесконечно рекурсивную функцию. Однако, если я использую Firebug и бросаю точку останова в fetch
, похоже, что это не так. Стек, который показывает мне Firebug, составляет всего около 4 или 5 кадров, даже через час.
Одно из решений, которое я рассматриваю, меняет свою рекурсивную функцию на итеративный, но я не могу понять, как бы вставить задержку между запросами Ajax без вращения. Я посмотрел на JS 1.7 "yield" keyword, но я не могу обернуть вокруг себя голову, чтобы выяснить, нужно ли мне здесь.
Лучшее решение для ежедневного обновления на странице, скажем, раз в час? Есть ли лучший/более компактный дизайн с длинным опросом, который не повредит браузеру даже после запуска в течение 8 или 12 часов? Или просто пропустить длительный опрос и использовать другой шаблон «постоянного обновления», поскольку я обычно знаю, как часто сервер будет отвечать за меня?
Это помогает мне! – JulienFr