2012-06-18 10 views
6

Estoy trabajando en algún tipo de interfaz editor/cooperativa multiusuario en línea, que hará mucho (como en miles) de solicitudes ajax durante el tiempo de vida de una página.Página con uso intensivo de Ajax: ¿reutilizar el mismo objeto XMLHttpRequest o crear uno nuevo cada vez?

lo que sería mejor: (problemas 'mejor' en términos de estabilidad, compatibilidad, evitando)

  1. Crear un objeto XMLHttpRequest y reutilización que por cada petición HTTP

  2. Crear un nuevo XMLHttpRequest objeto para cada solicitud HTTP

  3. Administre un 'grupo' dinámico de objetos XMLHttpRequest, cree uno nuevo cuando inicie una solicitud HTTP y no haya ningún objeto existente disponible, y etiquete un archivo previamente creado bject como 'disponible' cuando su última solicitud se completó con éxito

Creo que 1 no es una opción, hacer que algunas solicitudes pueden fallar, me pueden iniciar nuevas peticiones, mientras que una anterior aún no está terminada, etc.

En cuanto a 2, supongo que se trata de una pérdida de memoria, o puede dar como resultado un uso insano de memoria/recursos. ¿O puedo de alguna manera cerrar o eliminar un objeto cuando se completa su solicitud? (¿dónde/cómo?) ¿O el recolector de basura JS se encarga de esto por sí mismo?

Nunca intenté 3 antes, pero se siente como lo mejor de ambos mundos. ¿O es innecesario un enfoque como ese o sigo perdiendo problemas potenciales? ¿Exactamente cuándo puedo asumir que una solicitud para ser completada (por lo tanto, el objeto está disponible para una nueva solicitud), es cuando recibo readyState 4 y el estado HTTP 200? (es decir, ¿puedo estar seguro de que no habrá más actualizaciones o devoluciones de llamada después de eso?)

+0

Solo me pregunto qué servidor planeas usar y qué internet has conectado a esto porque este script si estás en lo correcto con las miles de solicitudes es extremadamente fácil usando – gabeio

+0

Tengo un servidor dedicado brutal disponible para esto. Pero solo se esperan miles de solicitudes en el transcurso de varias horas, no es como una solicitud cada segundo más o menos. Más como unos pocos cada minuto, pero puede seguir haciéndolo durante muchas horas. –

+0

ah bien javascript le irá bien si necesitara aún más rápido, es decir, una solicitud por segundo Yo sugeriría usar flash o un applet de Java – gabeio

Respuesta

3

Cree una nueva cuando la necesite. El GC tratará con los viejos una vez que ya no los necesiten.

Sin embargo, para algo así como un editor cooperativo es posible que desee considerar el uso de WebSockets en lugar de enviar solicitudes todo el tiempo. La sobrecarga de una pequeña solicitud HTTP es enorme, mientras que casi no hay sobrecarga con una conexión WebSocket.

+0

Gracias, iré de la manera más fácil (simplemente creando un nuevo objeto cada vez) por ahora, y miraré en WebSockets también. Solo para estar seguro, te estás refiriendo a la nueva cosa HTML5 javascript websocket, ¿verdad? –

+1

Sí, y posiblemente una biblioteca como 'socket.io' para manejar el respaldo XHR automáticamente si es necesario. – ThiefMaster

+0

¡Ah, nunca había oído hablar de eso antes, gracias! Una cosa, sin embargo, en los ejemplos de código en http://socket.io/ parece usar código JavaScript en el servidor? ¿Quién o qué se supone que debe ejecutar ese código? –

Cuestiones relacionadas