Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

128
Views
Throttle JS Event Listeners agregados por una biblioteca de terceros

Quiero acelerar las llamadas de función que se agregan como detectores de eventos a la función window.scroll por una biblioteca de terceros proporcionada por un proveedor externo (no se puede cambiar).

Me di cuenta de que la biblioteca causa cierta sobrecarga debido a su detector de eventos de desplazamiento, porque si elimino el controlador de eventos, mi página funciona mucho mejor.

Como no puedo controlar o cambiar directamente el archivo JS externo, pensé en leer los eventos de desplazamiento adjuntos a la ventana y eliminarlos/reenlazarlos nuevamente, pero en un formato acelerado, ya que ya tengo la biblioteca Underscore.js en uso.

Estoy tratando de leer los eventos de desplazamiento y luego reemplazar la función de devolución de llamada como una versión acelerada:

 jQuery(document).ready(function($) { let scrollEvents = $._data(window, 'events').scroll; for(evt of scrollEvents ) { evt.handler = _.throttle(evt.handler, 200) } });

No parece traer la mejoría adecuada. En la barra de desarrollo web "Oyentes de eventos globales" todavía veo los oyentes de eventos originales adjuntos, NO veo la biblioteca de guiones bajos (como capa intermedia) en la lista.

¿Qué es potencialmente incorrecto con este código?

Gracias

EDITAR Esos eventos se agregan globalmente a la ventana, vea la captura de pantalla de WebDev: ingrese la descripción de la imagen aquí y ejecuto el código anterior dentro de la consola WebDev, por lo que se ejecuta solo después de que esos eventos ya existen.

Y $._data(window, 'events').scroll; muestra TODOS esos 5 eventos, por lo que jQuery debería poder cambiarlos, ¿no?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Encontré una hermosa solución usando Underscore.js, mandando las funciones de devolución de llamada por un Throttler antes de agregarlo como Controlador de eventos:

 var f_add = EventTarget.prototype.addEventListener; var f_remove = EventTarget.prototype.removeEventListener; EventTarget.prototype.addEventListener = function(type, fn, capture) { this.f = f_add; if(type == 'scroll' && typeof _ === 'function') fn = _.throttle(fn, 350); this.f(type, fn, capture); } EventTarget.prototype.removeEventListener = function(type, fn, capture) { this.f = f_remove; if(type == 'scroll' && typeof _ === 'function') fn = _.throttle(fn, 350); this.f(type, fn, capture); }

Sobrescribe el prototipo de add/removeEventListener -> Y si el evento es un evento de desplazamiento, rodea la función fn con _.throttle().

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!