Javascript: Jquery getJSON, кажется, утечка памяти в цикле - PullRequest
1 голос
/ 21 марта 2011

У меня есть веб-страница, которая постоянно вызывает php-страницу, используя $ .getJSON, чтобы получить некоторую информацию.Я зацикливаюсь с использованием javascript setTimeOut.Он работает нормально, за исключением того, что при его использовании увеличивается объем памяти.

Я читал в тех местах, где вы должны быть осторожны при создании динамических элементов DOM и полностью удалять их, чтобы избежать утечек памяти в IE и Firefox, ноЯ даже не делаю этого на этой тестовой странице.(Я буду позже)

Моя конечная цель - создать веб-приложение, которое обновляет страницу пользователей при изменении базы данных по сравнению с другими приложениями на стороне сервера или другими событиями.Так что моя идея состоит в том, чтобы JavaScript постоянно вызывал php-скрипт, который возвращает время файла в базе данных, если кажется, что db изменился, получить информацию о базе данных.

Вот мой код:

<!doctype html>
<html lang="en">
    <head>
        <title>Test For Mem Leaks</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
        <script>
            function init(){
                setTimeout("call()",250);
            }

            function call(){
                var p = "test";
                var f = "returnDBTime";
                var a = name;
                    $.getJSON ('gateway/gateway.php', { p:p, f:f ,a:a  }, function (rere) {
                    setTimeout("call()",250);              
                });             
            }
       </script>
    </head>
<body>
</body>
</html>
<script type="text/javascript">
    init();
</script>

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

Вместо setTimeout и затем, установив его снова в обратном вызове, вы можете использовать setInterval И вы не создаете здесь никаких DOM-узлов, поэтому у вас не должно быть утечек памяти.Пожалуйста, подробно опишите вашу функцию обратного вызова ajax, потому что этот код работает нормально.

0 голосов
/ 21 марта 2011

Я не уверен, что setTimeout (даже если он не синхронизирован) сотрет контекст, чтобы ваши переменные могли быть отброшены.Вы пытались установить нулевые значения перед вызовом тайм-аута?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...