2012-06-18 1 views
6

Я работаю над каким-то сетевым многопользовательским интерфейсом editor/coop, который будет делать много (как в тысячах) аякс-запросов в течение одной страницы.Ajax-интенсивная страница: повторно использовать один и тот же объект XMLHttpRequest или создавать новый каждый раз?

Что будет лучше: («лучший» с точки зрения стабильности, совместимости, избежать неприятностей)

  1. Создать один объект XMLHttpRequest и повторно использовать, что для каждого запроса HTTP

  2. Создать новый XMLHttpRequest объект для каждого HTTP-запроса

  3. Управление динамическим «пулом» объектов XMLHttpRequest, создание нового при запуске HTTP-запроса и отсутствие существующего объекта и пометка ранее созданного o ▪ Таблицы, как «доступно», когда его последний запрос был успешно завершен

Я думаю, 1 это не вариант, вызвать некоторые запросов может потерпеть неудачу, я могу инициировать новые запросы в то время как предыдущая еще не закончен, и т.д.

Что касается 2, я думаю, что это утечка памяти или может привести к безумной памяти/использованию ресурсов. Или я могу как-то закрыть или удалить объект, когда его запрос будет завершен? (где/как?) Или сборщик мусора JS правильно позаботится об этом?

Никогда не пробовал 3 раньше, но он чувствует себя лучшим из обоих миров. Или такой подход ненужный, или я все еще не вижу потенциальных проблем? Точно, когда я могу предположить, что запрос будет завершен (таким образом, объект, доступный для нового запроса), заключается в том, что при получении статуса ReadyState 4 и http 200? (то есть я могу быть уверен, что после этого не последует никаких обновлений или обратных вызовов?)

+0

Просто интересно, какой сервер вы планируете использовать и какой интернет вы подключили к этому, потому что этот сценарий, если вы правильно с тысячами запросов, чрезвычайно ресурсоем, используя – gabeio

+0

У меня есть зверский выделенный сервер для этого. Но тысячи запросов ожидаются только в течение нескольких часов, это не похоже на запрос каждую секунду или около того. Чаще всего каждую минуту, но он может продолжать делать это в течение многих часов. –

+0

ah well javascript будет отлично работать, если вам понадобится еще быстрее, т. Е. Запрос в секунду, я бы предложил использовать flash или java-апплет – gabeio

ответ

3

Создайте новый, когда вам это нужно. GC будет заниматься старыми, как только они больше не понадобятся.

Однако для чего-то вроде кооперативного редактора вы можете захотеть использовать WebSockets вместо отправки запросов все время. Накладные расходы небольшого HTTP-запроса огромны, в то время как с соединением WebSocket почти нет накладных расходов.

+0

Спасибо, я пойду на простой способ (просто создавая новый объект каждый раз) на данный момент и посмотрю в WebSockets. Чтобы быть уверенным, вы имеете в виду новую вещь HTML5 javascript для websocket, верно? –

+1

Да, и, возможно, библиотека, такая как 'socket.io', при необходимости автоматически обрабатывает резервную копию XHR. – ThiefMaster

+0

Ах, никогда не слышал об этом раньше, спасибо! Одна вещь, хотя, в примерах кода на http://socket.io/, похоже, используется код JavaScript на стороне сервера? Кто или что должен выполнять этот код? –

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

  • Нет связанных вопросов^_^