Данные комет-сервера в iframe просто накапливаются? - PullRequest
1 голос
/ 10 июля 2011

Я помещаю теги [script] dosomething () [/ script] в iframe для моего комет-сервера, используя фрагментированные данные, но теги script просто продолжают накапливаться вечно. Как мне стереть его после каждого тега скрипта?

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Протрите тег сценария без повторного подключения

Вы можете удалить тег script каждый раз, когда он выполняется, добавив некоторый код, когда сервер печатает чанк.

<script type="text/javascript">
// Calls your message handler
app.handle("Hello World");

// Removes this script element
var scripts = document.getElementsByTagName("script"),
    elem = scripts[scripts.length - 1];

elem.parentNode.removeChild(elem);
</script>

сжатая версия

<script type="text/javascript">
app.handle("Hello World");
(function(){var a=document.getElementsByTagName("script"),a=a[a.length-1];a.parentNode.removeChild(a)})();
</script>

Но, как упоминал Альфред, Hidden Iframe или Forever Iframe слишком раздражают, чтобы их использовать. Лично я думаю, что этот классический способ заставляет Комету выглядеть изящной и очаровательной.

jQuery Stream

Я рекомендую использовать jQuery Stream , который обеспечивает унифицированный двусторонний интерфейс связи по протоколу WebSocket и HTTP. Это облегченная клиентская библиотека JavaScript, такая как jQuery.

Усовершенствованный транспорт Iframe, используемый jQuery Stream, во многих отношениях отличается от классического, запрашивая ответ text / plain, содержащий только сообщения вместо ответа text / html, и очищает ответ каждый раз, когда обрабатывается.

В соответствии с тестом , проведенным некоторыми пользователями, Internet Explorer 8, использующий улучшенный транспорт Iframe, не имеет проблем с сообщениями в несколько мегабайт (в отличие от Firefox, использующего XMLHttpRequest в качестве транспорта, который действительно испытывает трудности).

2 голосов
/ 10 июля 2011

Очистить тег скрипта

P.S .: Если вы хотите стереть теги сценария, возможно, вам следует следовать Собираются ли данные комет-сервера в iframe?

Я полагаю, вам следует закрыть соединение через некоторое время ( бесполезно, см. Данные сервера комет в iframe просто накапливаются? вместо ), который автоматически освобождается до памяти, связанной с этим запросом. Вы тогда, конечно, должны восстановить соединение. Эта страница говорит что-то еще, даже:

«Потоковое отображение страниц» означает браузер обнаруживает изменения сервера почти немедленно. Это открывает возможность обновления в реальном времени в браузер и позволяет двунаправленный поток информации. Тем не менее, это довольно далеко от стандартное использование HTTP, которое приводит к несколько проблем. Во-первых, есть неудачные последствия для памяти, потому что Javascript держать накапливается, и браузер должен сохранить все это в своей модели страницы. В богатом приложении с большим количеством Обновления, эта модель будет расти быстро, и в какой-то момент страницы обновление будет необходимо для того, чтобы Избегайте замены жесткого диска, или хуже судьба.

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

У кометы есть много проблем, которые нужно взломать:

  • Как вы можете прочитать из этой страницы WIKI , у нее также есть проблемы с «надежным методом обработки ошибок и невозможностью отслеживания состояния процесса вызова запроса».
  • Кроме того, Internet Explorer необходимо отправить нежелательную информацию, чтобы начать процесс (см. http://cometdaily.com/2007/11/05/the-forever-frame-technique/)

Вот почему я снова рекомендую вам использовать socket.io (см. Ниже), который позаботится обо всей этой чепухе.

Socket.io

Я советую вам использовать socket.io , что является очень хорошим продуктом. поддерживается всеми основными браузерами . Как вы видите, он поддерживает множество видов транспорта (XHR, Websockets и т. Д.) И выбирает лучший из доступных в вашем браузере для лучшей производительности.

...