dboun 函数

`dboun` 函数是一个用于限制函数执行速率的实用程序。它确保仅在自上次调用以来经过指定的延迟(`delay`)后才调用提供的函数(`fn`)。默认情况下,延迟设置为 400 毫秒。

这对于处理频繁触发的事件(例如调整大小、滚动或打字)特别有用,可以防止提供的函数被过度调用。

使用示例

场景:带防抖功能的搜索输入

// Define the function to handle search
function handleSearch(query: string): void {
    console.log("Searching for:", query);
}

// Create a debounced version of the search handler
const debouncedSearch = dboun(handleSearch, 300);

// Simulate typing in a search box
const input = document.querySelector('#searchBox');
input?.addEventListener('input', (event: Event) => {
    const target = event.target as HTMLInputElement;
    debouncedSearch(target.value);
});

在此示例中:

  • handleSearch 是处理搜索逻辑的函数。
  • debouncedSearch 确保仅在输入处于非活动状态 300 毫秒后才执行 handleSearch。
  • 参数

  • fn(函数):防抖延迟后要执行的函数。这是在指定延迟后将调用的回调函数。
  • delay(数字,可选):调用 fn 之前要等待的毫秒数。默认为 400 毫秒。这决定了防抖间隔。
  • 返回

    `dboun` 函数返回 `fn` 的一个新的去抖动版本。返回的函数会延迟 `fn` 的调用,直到自上次调用返回函数以来已经过了 `delay` 毫秒。

    工作原理

  • 当调用返回的函数时,它会清除为该函数设置的任何现有计时器(clearTimeout(timeout))。
  • 然后设置一个新的计时器(setTimeout)以在指定的延迟后调用 fn。
  • 如果在延迟期结束之前再次调用返回的函数,则会清除并重置先前的计时器。
  • 实际应用

  • 输入处理:当用户在输入字段中输入时,去抖动可防止事件处理程序的过度执行。
  • 调整大小事件:通过消除窗口调整大小事件处理程序的抖动来管理性能。
  • 滚动事件:通过控制滚动事件处理程序的执行频率来避免性能瓶颈。
  • 笔记

  • 如果您需要立即执行然后延迟(类似节流阀的行为),则此功能不提供开箱即用的功能。
  • 始终确保延迟适合用例,以平衡响应能力和性能。
  • 浏览器兼容性

    `dboun` 函数使用现代 JavaScript/TypeScript 功能,使其与大多数现代环境兼容。对于较旧的环境,请考虑转译代码。

    测试

    // Test debounced function
    const log = dboun((message: string) => console.log(message), 500);
    log("Hello"); // Will not log immediately
    log("Hello again"); // Resets the timer; only this message will log after 500ms