Мне нужно обновить много данных в течение заданного интервала с помощью JavaScript. Проблема в том, что независимо от того, какую библиотеку JS я использую (даже bare-bone js), что все браузеры, по-видимому, выделяют память на каждый запрос AJAX и впоследствии не могут ее освободить. Вот образец, который должен быть воспроизведен, чтобы воспроизвести ошибку:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Memleak Test</title>
<meta charset="utf-8" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
function readData() {
$.getJSON('data.php');
}
$(document).ready(function() {
setInterval(readData, 1000);
});
</script>
</head>
<body>
<div id="content"></div>
</body>
</html>
Эквивалентная тестовая страница доступна по адресу jsbin
Подробнее об этом:
- Я также попытался поместить функцию readData() в качестве замыкания непосредственно в вызове setInterval(). Это, похоже, не имеет никакого значения.
- Здесь я использую jQuery, но любая другая библиотека будет вызывать те же ошибки.
- My data.php script просто создает поддельный JSON-Object с json_encode() в PHP.
- Я знаю, что одна секунда - короткий таймфрейм здесь, в моей работе script таймфрейм составляет 30 секунд. Я просто хотел увидеть эффект быстрее (в рабочем приложении требуется несколько часов, но затем память тоже заполнена).
- Проблема в том, что приложение будет открыто 24/7.
Кажется, так просто, что я думаю, что я делаю что-то действительно не так, было бы здорово, если бы некоторые из гуру JS здесь могли мне помочь!