Jquery + Chrome памяти проблема - PullRequest
3 голосов
/ 07 октября 2009

Я запускаю этот скрипт в Google Chrome при использовании диспетчера задач Chrome для мониторинга использования памяти:

<html>
<head>
    <title>Test Page</title>
    <script type="text/javascript" src="jquery-1.3.2.js"></script>
    <script type="text/javascript">

        var count = 0;

        function incrementContent() {
            $("#content").text(count);
            count++;
            setTimeout(incrementContent, 5);
        }

    </script>
</head>
<body onload="incrementContent()">
<div id="content">
</div>
</body>
</html>

Использование памяти будет постоянно увеличиваться до максимума ~ 31 000 К, затем оно останется на этом уровне.

Насколько я вижу, цикл должен просто перезаписать один и тот же элемент в документе.

Что вызывает выделение большого объема памяти?

При использовании IE 8 я не вижу заметного увеличения использования памяти при запуске скрипта.

В Firefox 3.5.3 использование памяти проходит цикл увеличения на несколько мегабайт в течение минуты или около того, а затем снижается до своего базового уровня.

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Установили ли вы базовый уровень использования памяти Chrome без jQuery? Если вы подозреваете jQuery, то реализуйте свой пример без jQuery и посмотрите, как происходит использование памяти.

Также я заметил, что вы используете локально размещенную копию jQuery в вашем скрипте. Рассматривали ли вы вытащить библиотеку из бесплатного CDN? Google's AJAX CDN Microsoft AJAX CDN

1 голос
/ 07 октября 2009

Вы рекурсивно вызываете setTimeout. Не делай этого. Поскольку нет базового сценария для остановки рекурсивного вызова, он будет продолжаться бесконечно.

На языке, подобном Java, это в конечном итоге приведет к исключению StackOverflowException. Я не уверен, что делает Javascript, кроме как съесть память.

Вместо этого используйте setInterval:

function incrementContent() {
    $("#content").text(count);
    count++;
}
setInterval(incrementContent, 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...