首页 > 其他分享 >防抖和节流(小白文)

防抖和节流(小白文)

时间:2024-09-13 19:52:05浏览次数:10  
标签:function 防抖 const 节流 网站 白文 函数

文章目录


#防抖和节流:让你的网站跑得更快的小技巧

大家好!今天我们来聊聊两个让网站跑得更快的小技巧:防抖和节流。这两个词听起来可能有点专业,别担心,我会用简单的比喻来解释,保证你一听就懂。

什么是防抖和节流?

防抖(Debouncing)

想象一下,你在玩一款游戏,游戏里的敌人不停地跳来跳去,你想要射击它们。但是,如果你每次看到敌人就射击,子弹就会乱飞,而且很快就用完了。所以,你决定等敌人停下来再射击。这就是“防抖”的概念。

在网站开发中,防抖技术通常用在搜索框上。比如,你在一个购物网站上搜索商品,你每输入一个字母,网站就去找商品,这样会很累,而且效率不高。所以,我们让网站等你停止输入一段时间后再去搜索,这样就能节省资源,让网站更快。

节流(Throttling)

再想象一下,你在给花园浇水,如果你一直开着水龙头,水很快就会流光,而且可能会把植物淹死。但是,如果你控制好水龙头,让水流得慢一些,就能既浇好花又节约水。这就是“节流”的概念。(水=用户的请求,植物=服务器)

在网站开发中,节流技术通常用在滚动页面的时候。比如,你滚动页面,网站就会显示新的图片或者内容。如果每次滚动都去加载新的内容,网站就会变得很慢。所以,我们让网站在一定时间内只加载一次内容,这样就能保持网站的流畅。

如何实现防抖和节流?

防抖的实现

防抖的实现需要用到定时器,就像你玩游戏时等待敌人停下来再射击一样。下面是一个简单的防抖函数实现:

function debounce(func, wait) {
  let timeout; // 用来存储定时器的ID
  return function() { // 返回一个新的函数
    const context = this; // 保存当前的上下文
    const args = arguments; // 保存所有的参数
    clearTimeout(timeout); // 清除之前的定时器
    timeout = setTimeout(() => { // 设置一个新的定时器
      func.apply(context, args); // 执行原来的函数
    }, wait);
  };
}

使用这个函数,你可以这样包装你的搜索函数:

const search = debounce(function() {
  // 执行搜索操作
}, 300); // 300毫秒内没有新的输入,执行搜索

节流的实现

节流的实现需要记录上一次执行的时间,就像你控制水龙头一样。下面是一个简单的节流函数实现:

function throttle(func, limit) {
  let lastRan = 0; // 记录上一次执行的时间
  return function() {
    const context = this;
    const args = arguments;
    const now = Date.now(); // 获取当前时间
    if (now - lastRan >= limit) { // 如果距离上次执行超过了限制时间
      func.apply(context, args); // 执行原来的函数
      lastRan = now; // 更新上一次执行的时间
    }
  };
}

使用这个函数,你可以这样包装你的滚动事件处理函数:

window.addEventListener('scroll', throttle(function() {
  // 执行滚动操作
}, 100)); // 每100毫秒最多执行一次

结语

防抖和节流就像是网站开发中的两个小工具,它们可以帮助你的网站跑得更快,用户体验更好。希望这篇文章能够帮助你理解这两个概念,并在你的项目中应用它们。如果你有任何疑问,或者想要了解更多关于网站优化的知识,欢迎留言讨论!

标签:function,防抖,const,节流,网站,白文,函数
From: https://blog.csdn.net/2301_77409965/article/details/142218451

相关文章

  • Java超详细知识点——I/O流(字节流和字符流)
    File类:JavaAPI:java.io.File类是用来操作文件或文件夹的,无法用来读写1.首先创建一下file的对象:里面可以写相对路径或者绝对路径Filefile=newFile("CCC.java");也可以使用其他构造方法//Stringpath="D:\\ch06";//StringfileName="1.txt";Filefile=new......
  • .NET Core中实现防抖
    利用分布式锁在ASP.NETCore中实现防抖 前言在 Web 应用开发过程中,防抖(Debounce) 是确保同一操作在短时间内不会被重复触发的一种有效手段。常见的场景包括防止用户在短时间内重复提交表单,或者避免多次点击按钮导致后台服务执行多次相同的操作。无论在单机环境中,还是在分......
  • 【高级编程】Java IO流(下)字符流 Reader Writer 字节流读取二进制文件
    文章目录ReaderFileReaderBufferedReaderWriterFileWriterBufferedWriter读写二进制文件ReaderReader是一个抽象类,用于读取字符流。它是所有字符输入流的基类。Reader提供了一些基本的方法来读取字符数据intread()//读取单个字符,并返回一个整数。如果到达流......
  • 【高级编程】Java流(上)字节流 InputStream OutputStream
    文章目录文件操作流输入流InputStream输出流OutputStream文件操作文件是指相关记录或放在一起的数据的集合。是一种用于存储数据的基本单位,它可以包含各种类型的信息,例如文本、图像、音频或视频。文件在计算机中通常存储在磁盘或其他存储介质上,并且每个文件都有一个......
  • 【Day08-IO-文件&字节流】
    File        1.概述        File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在构造器说明publicFile​(Stringpathname)根据文件路径创建文件对象publicFile​(Stringparent,Stringchi......
  • Java I/O (Input/Output)——文件字节流
    JavaI/O简介    JavaI/O(输入/输出)是Java程序中用于处理数据输入和输出的重要部分。输入流(InputStreams):用于从数据源读取数据。常见的输入流包括FileInputStream(从文件读取)、BufferedInputStream(提高读取效率)等。输出流(OutputStreams):用于将数据写入到目的地。例如Fil......
  • 【学亮IT手记】利用字节流复制图片
     ......
  • 通过字节流下载网络图片到本地案例
    packagecom.zhangxueliang.demo;importjava.io.*;importjava.net.URL;publicclassURLDemo{publicstaticvoidmain(String[]args)throwsException{URLurl=newURL("http://f.hiphotos.baidu.com/image/pic/item/b3119313b07eca80787730......
  • 字节流批量下载图片代码实现
    packagecom.zhangxueliang.demo;importjava.io.*;importjava.net.URL;importjava.util.Properties;publicclassURLDemo{publicstaticvoidmain(String[]args)throwsException{Propertiesproperties=newProperties();InputStrea......
  • 利用分布式锁、本地锁在ASP.NET Core中实现防抖
    前言#在Web应用开发过程中,防抖(Debounce)是确保同一操作在短时间内不会被重复触发的一种有效手段。常见的场景包括防止用户在短时间内重复提交表单,或者避免多次点击按钮导致后台服务执行多次相同的操作。无论在单机环境中,还是在分布式系统中都有一些场景需要使用它。本文将介绍......