Как сделать Firefox быстрее обновлять изображения - PullRequest
3 голосов
/ 26 мая 2010

У меня есть вещь, которую я делаю, когда мне нужна веб-страница для потоковой передачи серии изображений с локального клиентского компьютера. У меня здесь очень простой прогон: http://jsbin.com/idowi/34

Код очень прост

setTimeout ( "refreshImage()", 100 );

function refreshImage(){
  var date = new Date()
  var ticks = date.getTime()
  $('#image').attr('src','http://127.0.0.1:2723/signature?'+ticks.toString());
  setTimeout ("refreshImage()", 100 );
}

По сути, на клиентском компьютере используется панель подписи. Мы хотим, чтобы подпись отображалась на веб-странице, и чтобы они видели, как они подписывают ее на веб-странице (на панели нет ЖК-дисплея, чтобы показать ее прямо здесь). Поэтому я настроил простой локальный HTTP-сервер, который получает изображение того, как выглядит текущее состояние панели подписи, и отправляется в браузер.

С этим нет проблем ни в одном браузере (протестированном в IE7, 8 и Chrome), кроме Firefox, где он чрезвычайно медленный и нервный и не соответствует скорости 10 FPS. У кого-нибудь есть идеи как это исправить? Я пытался создать очень простую двойную буферизацию в javascript, но это только ухудшило ситуацию.

Также для получения дополнительной информации кажется, что Firefox выполняет javascript с правильной частотой кадров, поскольку на сервере запросы поступают с постоянной скоростью. Но изображения обновляются только непоследовательно: от 5 раз в секунду до 0 раз в секунду (для обновления требуется 2 секунды)

Также я пробовал использовать разные форматы изображений с одинаковыми результатами. Форматы, которые я пробовал, включают в себя растровые изображения, PNG и GIF (GIF вызвали небольшую проблему в Chrome с мерцанием)

Возможно ли, что Firefox каким-то образом кэширует мои изображения, вызывая небольшое отставание? Я отправляю эти заголовки, хотя:

Pragma-directive: no-cache
Cache-directive: no-cache
Cache-control: no-cache
Pragma: no-cache
Expires: 0

Ответы [ 3 ]

1 голос
/ 26 мая 2010

Хорошо, так получается, что это одна из многих утечек в Firefox. У меня был сеанс Firefox, работающий в течение нескольких дней. Я только что перезапустил его и открыл страницу, и он (и другие вещи из JavaScript) набрал скорость. После его перезапуска я могу снизить частоту обновления даже до 50 мс, хотя это и не требуется.

Так что на самом деле не существует «решения» этой проблемы, кроме перезапуска Firefox время от времени.

1 голос
/ 26 мая 2010

Задержка может быть вызвана тем, как Firefox обрабатывает DNS-запросы и поддерживает IPv6.

Попробуйте отключить поиск IPv6 и посмотрите, устраняет ли это отставание.

0 голосов
/ 26 мая 2010

Может быть, вы пробовали это; ты сказал, что попробовал "двойную буферизацию", но это не совсем то же самое. Вместо одного тега <img>, чей "src" вы обновляете, используйте несколько (10, может быть). Запустите их все "дисплей: нет". Обработайте событие «load» для тегов <img> с помощью функции, которая скрывает все остальные <img>, кроме себя. Пусть ваш интервальный таймер (который, вероятно, должен быть интервальным таймером, а не серией тайм-аутов) выполняет итерацию по списку тегов, так же, как и сейчас.

Это сгладит? Я не уверен. Я бы наверняка попробовал.

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