Я пытаюсь избавиться от неприятной утечки памяти в моем браузере.
Вот что я пытаюсь сделать:
- Я периодически пытаюсь обновить изображение на 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>