¿Hay una mejor manera de crear actualizaciones asíncronas sin usar setInterval?

Tengo varias partes de mi sitio que comprueban las actualizaciones cada medio segundo, por lo que puede avisarle de mensajes, etc. Sin embargo, creo que usar $ .post con un setInterval puede ser un poco pesado en el sitio. ¿Existe algún método alternativo que sea mejor recomendado para estas tareas?

socket.io sería el camino a seguir si está utilizando nodeJS . De lo contrario, compruebe este complemento jQuery , se ha implementado una degradación elegante aunque no es tan completo como socket.io.

Sí, aunque no es trivial.

El mejor enfoque

Puede usar el sondeo largo (o “cometa”), que abre una conexión, la mantiene abierta durante 20 segundos aproximadamente y la vuelve a abrir de inmediato. El servidor puede enviar algo en cualquier momento.

Los navegadores más nuevos proporcionan websockets, que proporcionan conexiones persistentes.

Ambos son relativamente complejos de codificar, por lo que necesita algún tipo de marco para manejar las cosas por usted. Además, una conexión debe mantenerse abierta para cada usuario, por lo que solo funciona con algo liviano como NodeJS.

El enfoque más fácil

Si desea algo más fácil de implementar, recomendaría buscar actualizaciones como sugirió (se llama sondeo corto para contrastarlo con sondeo largo / websockets). Puedes hacer una solución de sondeo simple así:

window.setInterval(function () { // More lightweight than $.post $.get('/datasource', function () { /* do something */ }); }, 3000); 

Intervalos de 3 segundos han sido utilizados antes por personas de alto perfil .

Si las cosas se vuelven lentas, intente perfilar consultas de base de datos en / datasource