Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
¿Cómo limitar la velocidad de las solicitudes ajax?

Hay varios divs y controladores para enviar solicitudes ajax cuando se hace clic en ellos. Mi problema es que no sé cómo obligar a mi controlador a no exceder el límite de 1 solicitud por 30 segundos.

¡Aprecio tu ayuda!

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El excelente Underscore.js tiene una función de aceleración. Pasa el controlador que desea acelerar y obtiene una versión de velocidad limitada de la misma función.

 var throttled = _.throttle(someHandler, 100); $(div).click(throttled);

http://documentcloud.github.com/underscore/#throttle

Aquí hay una versión simplificada que he usado en mi propio código:

 function throttle(func, wait) { var timeout; return function() { var context = this, args = arguments; if (!timeout) { // the first time the event fires, we setup a timer, which // is used as a guard to block subsequent calls; once the // timer's handler fires, we reset it and create a new one timeout = setTimeout(function() { timeout = null; func.apply(context, args); }, wait); } } }

Una buena manera de probarlo es activando un montón de eventos de desplazamiento y observando el registro de su controlador en la consola de Firebug:

 document.addEventListener("scroll", throttle(function() { console.log("test"); }, 2000), false);

Aquí hay una versión que limita los eventos de clic en div s a una vez cada 30 segundos, según lo solicitado (requiere jQuery):

 $("div").click(throttle(function() { // ajax here }, 30000));
over 4 years ago · Santiago Trujillo Denunciar

0

Si desea limitar la tasa, desafortunadamente el método _.throttle que proporciona underscore.js no es su solución. Throttle simplemente se asegurará de que su método nunca se llame más de X segundos y, por lo tanto, todas las llamadas de función posteriores se descartarán hasta que haya pasado ese período.

Si desea establecer un límite de velocidad para que nunca llame a su función más de X veces por segundo, pero no pierda esas llamadas de función por completo, entonces necesita una solución completamente diferente.

He escrito una extensión de guión bajo en https://gist.github.com/1084831

Puede ver un ejemplo práctico en http://jsbin.com/upadif/8/edit#preview

over 4 years ago · Santiago Trujillo Denunciar

0

Cree un indicador booleano canFireRequest, o lo que sea, y configúrelo en falso después de cada solicitud ajax. A continuación, cree un lapso de tiempo de 30 segundos que lo restablezca como verdadero; verifique el valor de la bandera antes de cada nueva solicitud.

He aquí un ejemplo aproximado:

 if ($(this).data('canFireRequest')) { // Ajax request goes here $(this).data('canFireRequest', false); } setTimeout(function() { $(this).data('canFireRequest', true) }, 30000);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda