Утечка памяти в Javascript при переключении между изображениями (FireFox4) - PullRequest
2 голосов
/ 06 апреля 2011

У меня, как мне кажется, довольно тривиальный кусочек JavaScript. Если я запускаю это очень быстро, так что ситуация усугубляется, распределение памяти в FireFox 4 продолжает увеличиваться. Я попробовал это в chrome, и память, кажется, остается стабильной.

Это проблема FF4 или я плохо сконструировал свой JavaScript?

Обратите внимание, что другие файлы JS не загружаются на страницу. Я запускаю FF в «безопасном режиме» со всеми отключенными аддонами. Другие вкладки не загружены.

<img id="heartbeat" name="heartbeat" src="/web/resources/graphics/greylight.png" />

    <script type="text/javascript">

        var hasTimedout = 1;
        var lastPollTime = new Date();;
        var maxDifference = 6000 * 2; //allows us to miss one poll of the data without showing anything bad

        function heartbeat()
        {
            var curTime = new Date();

            var diff = curTime.getTime() - lastPollTime.getTime();

            if (diff > maxDifference && hasTimedout == 0)
            {
                document.getElementById('heartbeat').src = '/web/resources/graphics/greylight.png';

                hasTimedout = 1;
            }
            else if (diff < maxDifference && hasTimedout == 1)
            {
                document.getElementById('heartbeat').src = '/web/resources/graphics/greenlight.png';

                hasTimedout = 0;
            }

            toggle_visibility('heartbeat');
        }

        function toggle_visibility(id) {
           var e = document.getElementById(id);
           if (e.style.display == 'block')
              e.style.display = 'none';
           else
              e.style.display = 'block';
        }

        setInterval("heartbeat()",20);    
    </script>

1 Ответ

2 голосов
/ 06 апреля 2011

Некоторая информация о сборке мусора Javascript: SO Thread на JS GC

Особый интерес (возможно):

  • Использовать операторы удаления. Всякий раз, когда вам создать объект, используя новый Скажите, соедините это с удалением заявление. Это гарантирует, что все память, связанная с объект, включая имя его свойства, доступно для сбора мусора. Оператор удаления обсуждается подробнее в разделе «Освобождение объектов».
  • Используйте ключевое слово var. Любая переменная создан без ключевого слова var создан в глобальном масштабе и является никогда не подходит для мусора коллекция, представляя возможность утечки памяти.

Я могу только заключить, что вы должны попытаться соединить создание вашего объекта, используя ключевое слово "new" с операторами delete, и посмотреть, если это изменит.

В противном случае код выглядит нормально.

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