2013-06-06 3 views
1

Я создал систему видеонаблюдения, где камера снимает фото каждую секунду и отправляет это изображение на сервер, где он перезаписывает предыдущий. На стороне клиента У меня есть простой JavaScript с settimeout, чтобы загрузить это изображение каждого второгоУтечка памяти при загрузке изображений с помощью javascript's settimeout

$("img").attr("src", "http://mysite/image.jpg?randomString="+new Date().getTime()); 

Но это вызывает утечку памяти и в конечном итоге сбой страницы. Как избежать этого? Кэширует проблему здесь? Каждую секунду браузер кэширует каждое новое изображение, и это является причиной утечки памяти?

+0

Поскольку у вас разные образы «imagename» каждый раз, браузер, конечно, пытается его кешировать. – Christoph

+0

К сожалению, вы имеете в виду, что сам браузер действительно сбой? Не должно быть абсолютно ничего, что вы можете сделать на веб-странице, которая приведет к сбою браузера. Если есть, это ошибка браузера. – jcsanyi

+0

Можете ли вы разместить больше своего javascript-кода? – jcsanyi

ответ

4

Может быть проблема кэширования, поскольку браузер может кэшировать все эти изображения, так как каждый раз они имеют новые имена изображений (это не должно приводить к сбою).

В этом случае, установите эти директивы кэширования в заголовке и посмотреть, если это исправляет проблему:

<!-- disable caching on proxy servers --> 
<meta http-equiv="pragma" content="no-cache"> 
<!-- set expiration date to "immediately" --> 
<meta http-equiv="expires" content="0"> 
<!-- instruct the browser to not cache the webpage --> 
<meta http-equiv="cache-control" content="no-cache" /> 

С другой стороны, что может быть еще одной проблемой является вашим JavaScript. Если сервер не может своевременно обрабатывать HTTP-запросы, вы ставите в очередь множество неразрешенных HTTP-запросов в браузере. Попробуйте установить таймаут, чтобы сказать 5 секунд (= 5000 мс) в этом случае.

Третьим возможным решением может быть манипулирование изображением с помощью простого javascript, чтобы исключить возможность утечки памяти в jQuery.

// cache the element once 
var img = document.querySelector("img"); 

// use in setTimeout (Don't create a new Time Object on every call): 
img.src = "/image.jpg?randomString="+Date.now(); 
+0

Заполнение кеша браузера не приведет к сбою или какой-либо проблеме с памятью. – jcsanyi

+1

Кроме того, насколько я знаю, установка этих значений на HTML-странице повлияет на кэширование этой страницы, но ничего не сделает с изображениями, загружаемыми этой страницей. – jcsanyi

+0

@jcsanyi вы можете это доказать? вы должны позволить ОП решить, помогает это или нет. Это правильный ответ в каждом случае. и «насколько я знаю» не очень убедительно. – Christoph

Смежные вопросы