JavaScript函数节流和函数防抖之间的区别

yizhihongxing

JavaScript函数节流和函数防抖是前端开发中常用的优化技巧,本文将对这两种技巧进行详细讲解,并且给出具体的示例说明。

什么是函数节流?

函数节流是指在一定时间内,无论事件被触发了多少次,都只会执行一次函数。常见的应用场景包括:

  • 滚动加载页面时,用户快速滑动页面,避免频繁触发事件,降低页面性能。
  • 窗口大小改变时,频繁触发事件,限制事件触发次数,保证事件响应的流畅性。

函数节流的实现通常采用定时器的方式,用一个变量记录上次执行的时间戳,然后在每次执行时判断当前时间是否超过规定时间间隔。

下面是一个函数节流的例子,实现当用户快速滚动页面时,图片懒加载仍能同时运行,但不会过度消耗浏览器性能:

function throttle(func, delay) {
  let prev = Date.now();
  return function() {
    const context = this;
    const args = arguments;
    const now = Date.now();
    if (now - prev >= delay) {
      func.apply(context, args);
      prev = Date.now();
    }
  }
}

function lazyLoadImg() {
  // code
}

window.addEventListener('scroll', throttle(lazyLoadImg, 300));

什么是函数防抖?

函数防抖的作用是在一定时间内,对于连续触发的事件,只执行一次函数。使用场景包括:

  • 搜索框实时搜索时,用户连续输入字符,减少请求次数,避免服务器负荷过大。
  • 窗口大小改变时,连续触发resize事件,但只有在停止改变大小时才执行事件响应。

函数防抖的实现也可以采用定时器的方式,用一个变量记录上次执行的时间戳。在规定时间间隔内,如果再次触发事件,就将上次的定时器清空,重新设置定时器。

下面是一个函数防抖的例子,实现当用户连续输入时,延迟一定时间再执行搜索:

function debounce(func, delay) {
  let timerId;
  return function() {
    const context = this;
    const args = arguments;
    if (timerId) clearTimeout(timerId);
    timerId = setTimeout(() => {
      func.apply(context, args);
    }, delay)
  }
}

function search() {
  // code
}

const searchBar = document.querySelector('#search-bar');
searchBar.addEventListener('input', debounce(search, 300));

总结

函数节流和函数防抖都是优化前端性能的有用技巧。函数节流用于限制事件触发次数,适合滚动,拖拽等场景;函数防抖用于连续多次触发事件时,减少不必要的处理,适合输入框搜索等场景。了解这两种优化技巧,可以更好地掌握前端性能优化的策略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript函数节流和函数防抖之间的区别 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS动态添加元素及绑定事件造成程序重复执行解决

    JS动态添加元素及绑定事件是Web开发中常见的操作,可以让网页在用户交互过程中更加灵活,但有时候可能会遇到程序重复执行的问题。为了解决这个问题,我们可以采取以下方法。 1. 使用事件委托 事件委托是一种基于事件冒泡的机制,可以将事件绑定到父节点上,解决动态添加元素重复绑定事件的问题。具体操作如下: //绑定事件 document.querySelector(…

    JavaScript 2023年6月11日
    00
  • 一个非常全面的javascript URL解析函数和分段URL解析方法

    一个非常全面的 Javascript URL 解析函数和分段 URL 解析方法 JavaScript经常被用于处理URL。这个URL解析函数能够完整、彻底地解析一个 URL 字符串,使得开发人员可以轻松地获取任何 URL。 URL 解析函数 使用以下函数来解析一个 URL: function parseURL(url) { var parser = docu…

    JavaScript 2023年6月11日
    00
  • JS闭包的几种常见形式实例详解

    JS闭包的几种常见形式实例详解 什么是闭包? 在理解闭包的几种形式之前,我们先来了解一下什么是闭包。 闭包指的是一个函数在返回时,能够记住并访问该函数定义时作用域中的变量。这可以通过在函数内部定义一个函数来实现。 闭包发挥着非常重要的作用,因为它可以在函数外部访问函数内部的变量和函数,并且使得这些变量和函数的作用域得以保存。 闭包的几种常见形式 1. 函数作…

    JavaScript 2023年6月10日
    00
  • JS生成随机字符串的多种方法

    JS生成随机字符串的多种方法 在JS中,生成随机字符串是常见的需求。我们可以使用多种方法来实现这个需求,下面介绍几种常见的方法。 使用Math.random()方法生成随机字符串 Math.random()方法返回一个0到1之间的随机数。我们可以使用这个方法将结果转换成字符串,然后截取字符串来生成随机字符串。 其中,Math.random()方法返回的是一个…

    JavaScript 2023年5月28日
    00
  • 仅IE不支持setTimeout/setInterval函数的第三个以上参数

    首先需要明确,setTimeout和setInterval函数的第三个以上参数在所有现代浏览器和IE9以上版本均被支持。但是,在IE9及以下版本中,第三个以上参数并不会被当做函数的参数传递进去,而是被当做全局对象属性传递进去。 解决方法是在第三个以上参数中传入一个字符串类型的函数参数,在函数内通过eval方法执行即可。 以下是简单的示例说明: 传递一个字符串…

    JavaScript 2023年6月11日
    00
  • js实例之01支付后的10秒倒计时

    这是一个通过js实现的支付后的页面,点击支付会跳出一个弹窗,提示你是否要确定支付,确定后进入付后界面,该页面有着10秒倒计时,计时结束后便会返回原界面。也可以选择立刻返回,来返回主页面第一个zhifu.html页面<!DOCTYPE html> <html lang=”en”> <head> <meta charse…

    JavaScript 2023年4月18日
    00
  • 异步动态加载js与css文件的js代码

    异步动态加载JS与CSS文件的JS代码是一个常见的优化Web性能的技巧,可以提升用户的访问体验,减少网站的加载时间。 以下是实现异步动态加载JS与CSS文件的JS代码的完整攻略: 第一步:创建一个函数 首先,需要创建一个函数来加载JS与CSS文件。这个函数应该包含两个参数,第一个参数是文件的路径,第二个参数是文件的类型(即JS或CSS)。 function …

    JavaScript 2023年5月27日
    00
  • asp.net 实现下拉框只读功能

    当我们在 ASP.NET 中使用下拉框时,有时希望该下拉框在不禁用的情况下变为只读状态,这意味着用户仍然可以查看下拉框内容,但不能更改内容。以下是 ASP.NET 实现下拉框只读功能的攻略: 步骤一:使用 ASP.NET 的 DropDownList 控件 要实现下拉框的只读功能,需要在 ASP.NET 中使用 DropDownList 控件。我们可以在 .…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部