Antirrebote de Función

Idioma:
JavaScript
42 vistas
0 favoritos
2025年9月19日

Implementación del Código

JavaScript
function debounce(fn,delay){
    let timerId;
    return function(...args){
        clearTimeout(timerId);
        timerId=setTimeout(()=>{
            fn.apply(this,args);
        },delay);
    };
}

//usage
const d_layout = debounce(layout,500);
window.onresize = d_layout;

En JavaScript, la función de antirrebote es una herramienta esencial para optimizar operaciones de alta frecuencia y que consumen tiempo. Su lógica central consiste en retardar la ejecución de la función y cancelar los retardos repetidos. Esto garantiza que cuando una función es activada múltiples veces en un corto período, solo se ejecute después de esperar un tiempo de retardo especificado a partir del último activación, evitando el consumo de rendimiento causado por llamadas innecesarias.

Su principio de funcionamiento se puede entender mediante la analogía de "cierre de puertas de un ascensor": Después de que un ascensor abre sus puertas, espera un período fijo por defecto (por ejemplo, 2 segundos) antes de cerrarlas. Si durante este tiempo de espera entra un nuevo pasajero (lo que corresponde a una nueva activación de la función), el temporizador de espera original se cancela y se reinicia la cuenta regresiva. Solo cuando no haya nuevas activaciones después del final de la cuenta regresiva, se llevará a cabo la acción de "cerrar las puertas" (que corresponde a la ejecución de la función).

#Antirrebote de Función

Descripción del Fragmento

Escenarios Aplicables

  • Activación de alta frecuencia: La función es llamada repetidamente en un corto tiempo (por ejemplo, eventos resize de la ventana, eventos input de los campos de texto). Esto no se limita a eventos DOM, sino que también es aplicable a llamadas de funciones de alta frecuencia en entornos no DOM (como Node.js).
  • Funciones que consumen tiempo: La función llamada es de tipo intensivo en CPU (por ejemplo, cálculos de diseño de página, operaciones extensas con DOM que causan reflujos/re pintados) o intensivo en E/S (por ejemplo, solicitudes de red, lectura y escritura de archivos). Operaciones simples (como calcular 1+1) no necesitan antirrebote.
  • Prioridad al resultado final: Entre los resultados de múltiples llamadas en un corto tiempo, solo es necesario retener el resultado de la última llamada. Por ejemplo, después de ajustar el tamaño de la ventana, solo se necesita el diseño correspondiente al tamaño final; los diseños generados durante el proceso de ajuste no tienen sentido.

Comentarios

Cargando...