Profile avatar

鱼翅

同歌性歌颂,同歌性发原

最近更新

本站由 yuchiXiong 使用 Stellar 1.29.1 主题创建。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

五彩斑斓的黑? 喷一喷单色黑与四色黑2024 年,我终于用上 rem 了......吐槽一下: 还得是拓展坞懂视频接口暗话 JavaScript 函数式: add(3)(4)一点都不酷前端条件竞态乱谈——可能被我误解的函数防抖数据结构其二 并查集数据结构其一 线性表JavaScript 元编程——基于 Proxy 实现 active_record 动态查找从 Rails 视角看现代前端——换一种方式实现 SPA在 Rails 中接入微信支付指北
主页/JavaScript 高级程序设计
2022-12-31
2103 次阅读

前端条件竞态乱谈——可能被我误解的函数防抖

JavaScript防抖节流异步编程

什么是条件竞态?

条件竞态是指多个操作的结果依赖于它们的执行顺序,而这个顺序是不确定的。在前端开发中,常见的条件竞态问题包括:

  • 用户快速点击按钮触发多次请求
  • 输入框内容变化触发多次搜索请求
  • 滚动事件触发频繁计算

函数防抖的误解

我曾经认为防抖主要是为了减少函数调用次数,提高性能。但实际上,它更重要的作用是解决条件竞态问题。


// 常见的防抖实现
function debounce(fn, delay) {
  let timer = null;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  }
}
      

通过防抖,我们可以确保只有最后一次操作会被执行,从而避免条件竞态问题。

许可协议

本文采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。

较旧文章
数据结构其二 并查集
暗话 JavaScript 函数式: add(3)(4)一点都不酷
较新文章