Утечка памяти при динамическом обновлении изображения с помощью javascript

Я пытаюсь избавиться от неприятной утечки памяти в моем браузере.

Вот что я пытаюсь сделать:
- Я периодически пытаюсь обновить изображение на HTML-странице с помощью javascript.
- Весь код должен быть совместим с Internet Explorer 6 или выше и Firefox.

Вы можете найти мой код ниже.

Вот что я заметил: Каждый раз, когда я запрашиваю новое изображение, кажется, что браузер сохраняет предыдущее изображение в своем кеше. Следовательно, использование памяти chrome9 / Internet Explorer 6 и 8 / Safari 5 продолжает линейно расти во времени. Только firefox (3.6), кажется, ведет себя нормально, когда я добавляю к изображению заголовки без кеширования. Я установил довольно высокую частоту обновления (10 мс), чтобы быстро увидеть рост памяти.

Что я уже пробовал:
-Добавление заголовков к изображению, отключающее кеширование: работает только для firefox
Это заголовок ответа:

HTTP / 1.1 200 OK Дата: понедельник, 14 февраля 2011 г., 11:17:02 GMT Сервер: Apache / 2.2.9 (Debian) PHP / 5.2.6-1 + lenny9 с Suhosin-Patch mod_python / 3.3.1 Python / 2.5.2 X-Powered-By: PHP / 5.2.6-1 + lenny9 Прагма: без кеширования Cache-control: no-cache, no-store, must-revalidate, max-age = 1, max-stale = 0, post-check = 0, pre-check = 0, max-age = 0. Истекает: Mon, 14 Feb 2011 11:17:02 GMT Длина содержимого: 358 Keep-Alive: тайм-аут = 15, максимум = 100 Подключение: Keep-Alive Тип содержимого: изображение / png

-Запрос изображения в строковом формате base64 с помощью метода POST (запросы POST по умолчанию не кэшируются): без разницы
-Попытка различных вещей, таких как установка переменных на null и вызов clearInterval или сопоставимых методов.
-Изменение / не изменение имени изображения каждый раз, когда я делаю запрос.
-Загрузка приведенного ниже кода в iFrame и обновление iFrame каждые 5 секунд, похоже, очищает память во всех браузерах, кроме IE6, так что это не решение.
-Многое других вещей, которые, похоже, не работали.

Я надеюсь, что любой из вас, умные ребята, сможет мне помочь. Я в отчаянии =)

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate, max-age=-1, max-stale=0, post-check=0, pre-check=0">
    <meta http-equiv="expires" content="-1">
    <style type="text/css">
        body {
            padding: 0px;
            margin: 0px;
            background-color: #B0B9C0;
        }

        img {
            width: 167px;
            height: 125px;
            background-color: #B0B9C0;
            border: none;
        }
    </style>
    <script type="text/javascript">
        var previewUrl     = "http://nick-desktop/image/";
        var previewImage   = document.createElement("img");
        var previewTimeout = 10;
        var previewWidth   = 200;
        var previewHeight  = 80;
        var timerID = 0;

        function initialize() {
            if(previewTimeout==null || previewUrl == null || previewWidth==null || previewHeight==null) return;
            document.body.appendChild(previewImage);
            previewImage.src = previewUrl;
            previewImage.style.width = previewWidth+"px";
            previewImage.style.height = previewHeight+"px";
            timerID = setInterval(doPoll, previewTimeout);
        }

        function doPoll() {
            previewImage.src = previewUrl + new Date().getTime()+".png";
        }
    </script>
</head>
<body onload="initialize()">
</body>

7
задан Nick 14 February 2011 в 13:08
поделиться