Необходимо делать опрос сервера с интервалом в 250мс. Сервер находится в другом домене, поэтому для обращения был выбран JSONP. Однако, оказалось, что в Internet Explorer 9 происходит нечто очень похожее на утечку памяти. Приведу пример:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="scripts/jquery-1.7.1.min.js"></script>
<script src="scripts/jquery.jsonp-2.2.0.min.js" type="text/javascript"></script>
</head>
<body>
<h1> Test in progress... Please, don't close this page </h1>
<script type="text/javascript">
function send(){
$.ajax({
url: "http://localhost:81/job/GetAllStatuses/jsonp",
success: onReceive,
dataType: 'jsonp',
cache: false
});
// Вариант со сторонним плагином - то же самое
// $.jsonp({
// url: "http://localhost:81/job/GetAllStatuses/jsonp?callback=?",
// success: onReceive
// });
}
function onReceive(message) {
// Даже если здесь ничего не делать - утечка есть
}
setInterval(send, 250);
</script>
</body>
</html>
Как видно, было сделано 2 теста — с использованием jQuery и отдельного плагина. Результат приблизительно один и тот же — линейный рост памяти, потребляемой процессом IE. За 1,5 часа рост ~ на 270 MB.
Кстати, забавно — запускал нечто подобное и под Chrome, но там измерял размер хипа (с помощью встроенного средства профилирования памяти) — результат крайне интересный: при использовании $.ajax размер хипа увеличился за 17 часов ~ на 30МБ, а вот у плагина ($.jsonp) результат был неожиданно лучше — за 17 часов вырос всего на 30КБ =)
Поэтому хотелось бы узнать каким образом, используя JSONP, устранить такое неуемное потребление памяти?
PS. Провел тест с использованием
вот этой штуки - результат тот же
