Foros del Web » Programando para Internet » Javascript »

setInterval - Best practices!

Estas en el tema de setInterval - Best practices! en el foro de Javascript en Foros del Web. Hola amigos, Tengo una página que requiere refrescar constantemente cierta información, para lo cual uso setInterval y AJAX, pero tengo una duda en cuanto si ...
  #1 (permalink)  
Antiguo 05/10/2014, 21:34
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
setInterval - Best practices!

Hola amigos,

Tengo una página que requiere refrescar constantemente cierta información, para lo cual uso setInterval y AJAX, pero tengo una duda en cuanto si ésta es la mejor manera de hacerlo.
La ZONA1 (por ponerle algún nombre) son marcadores de partidos de la NFL, y quiero refrescar esos marcadores cada 30 segundos... y por otro lado está la ZONA2 donde hay una especie de chat que los usuarios van dejando mensajes, y eso lo quiero refrescar cada 5 segundos.

El código que uso es algo más o menos así:
Código:
...
...
var iteration = 0;
var counter = setInterval(function() {
	iteration++;
	// cada 5 segundos actualizo ZONA2
	if (iteration % 5 == 0) {
		$.ajax({ type: "POST", url: "view.php", data: { ... }, ...  }).done(
			function(res) { 
				// aquí actualizo el chat con los valores leídos			
			}
		);
	}
				
	// cada 30 segundos actualizo ZONA1
	if (iteration == 30) {
		$.ajax({ type: "POST", url: "view.php", data: { ... }, ... }).done(
			function(res) { 
				// aquí actualizo los marcadores NFL
			}
		);
		iteration = 0;
	}
}, 1000);
...
...
Yo creería que esto es mejor que usar dos setInterval, uno cada 5 y el otro cada 30 segundos... o estoy en un error?

Saludos y gracias por el apoyo,
Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #2 (permalink)  
Antiguo 06/10/2014, 00:39
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: setInterval - Best practices!

La idea no es mala, pero, al cabo de un tiempo, sobrecargarás al servidor de peticiones. Para estos casos, te aconsejo leer sobre Websockets. No te explico más al respecto porque también estoy en proceso de aprendizaje sobre dicho tema, pero te aseguro que es mucho más eficiente que hacerlo del modo en que actualmente lo pretendes hacer.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 06/10/2014, 02:02
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: setInterval - Best practices!

Hola Alexis, gracias por tu respuesta.
Efectivamente estuve viendo y creo que usar las websockets es la solución más elegante, pero me surge una duda... leyendo el link que me envías, recomiendan usar las websockets en casos en que la "latencia sea muy baja y se requiera una actualización casi en tiempo real". En mi caso, es una web de uso masivo (tipo portal) y se va a conectar mucha gente con conexiones lentas y de alta latencia, además de que no necesito que las actualizaciones sean en tiempo real, incluso puedo manejar hasta una demora de 15-20 segundos en la actualización de los comentarios sin que eso me afecte.
¿Habrá manera de perfeccionar la idea inicial sin tener que cambiar el código de manera tan drástica con el uso de las websckets?
Saludos y gracias por la ayuda!!
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #4 (permalink)  
Antiguo 06/10/2014, 02:24
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: setInterval - Best practices!

Pues, 15 a 20 segundos todavía me sigue pareciendo un intervalo corto, porque, además, debes de tener en cuenta que un usuario promedio pasará más de 1 minuto viendo tu página web, entonces, luego de un buen rato, ya empezará a ver cómo afecta a la velocidad de tu página las constantes peticiones al servidor, sin embargo, si deseas continuar con la forma que tienes, creo que está bien, aunque, como bien dices, también puedes usar dos intervalos de tiempo, de ese modo, ya no ejecutas el proceso cada segundo sino cada 5 y 30 segundos.

Código Javascript:
Ver original
  1. setInterval(función1, 5000); //Se ejecutará 'función1' cada 5 segundos
  2. setInterval(función2, 30000); //Se ejecutará 'función2' cada 30 segundos

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 06/10/2014, 02:51
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: setInterval - Best practices!

Es que también hay un coutdown (que no lo puse en el ejemplo), que va mostrando cuánto tiempo queda para el inicio del partido... por eso está el setInterval a 1 segundo para ir mostrando el reloj.
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #6 (permalink)  
Antiguo 06/10/2014, 06:13
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 3 meses
Puntos: 45
Respuesta: setInterval - Best practices!

Buenas.

La forma en que planteas los ifs no es lógica ya que si no se cumple el primero el segundo tampoco se cumplirá así que no tiene sentido ponerlo ahí.
__________________
tecnawebs.es Diseño web y programación - Modelado 3D.

google plus
  #7 (permalink)  
Antiguo 06/10/2014, 06:54
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: setInterval - Best practices!

Hola Tecna,
Los IF's son independientes entre sí... el primero se va a cumplir cuando la variable iteration sea múltiplo de 5 (o sea, cada 5 segundos) y en el segundo IF va a entrar sólo cuando iteration sea 30 (cada 30 segundos)... el primer IF no condiciona el segundo, no hay relación entre ellos.
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #8 (permalink)  
Antiguo 06/10/2014, 08:03
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: setInterval - Best practices!

Un inciso.

Tecna dice que si el primer if no se cumple, el segundo tampoco se cumplirá. Eso es cierto.

Así mejor:
Código Javascript:
Ver original
  1. if( iteracion % 5 == 0 ) {
  2.     //foo
  3.     if(iteracion % 30 == 0) {
  4.         //bar
  5.     }
  6. }

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Etiquetas: ajax-php-mysql, setinterval
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:39.