提升网页交互体验的秘密武器——防抖和节流

news/2024/6/17 16:49:04 标签: 前端, javascript

说在前面

在现代Web开发中,提高网页性能是至关重要的。本文介绍了防抖和节流这两种常用的性能优化技术,通过控制函数的执行频率,有效减少不必要的计算和网络请求,从而提升用户体验和页面加载速度。

函数节流

节流是指限制一个函数在一定时间内只执行一次。当持续触发事件时,保证每隔一段时间只执行一次事件处理函数。举例来说,假设有一个按钮点击事件会触发某个函数,通过节流的方式,即使用户频繁点击按钮,该函数也只会在一定时间间隔内执行一次。

javascript">function throttle(func, ms = 1000) {
    //标记是否可以执行
    let canRun = true;
    return function (...args) {
        //不可执行
        if (!canRun) return;
        //执行后设置不可执行
        canRun = false;
        //设置执行周期
        setTimeout(() => {
            func.apply(this, args);
            //重置标记
            canRun = true;
        }, ms);
    }
}

测试 :

javascript">const task = () => { console.log('run task') };
const throttleTask = throttle(task, 1000);
//鼠标连续点击,在设置的执行周期内只会触发一次
window.addEventListener('click', throttleTask);

应用:

  • 滚动加载,加载更多或滚动到底部监听
  • 搜索框,搜索联想功能
  • 高频点击提交,表单重复提交

函数防抖

防抖是指在事件被触发指定时间后,才执行事件处理函数。如果在这个指定时间内又有相同事件被触发,则这个计时就会被重新开始。举例来说,假设有一个输入框用于搜索,用户在输入过程中会触发搜索事件,通过防抖的方式可以确保用户停止输入一段时间后才执行实际的搜索操作,避免频繁触发搜索请求。

javascript">function debounce(func, ms = 1000) {
    //定时器ID
    let timer;
    return function (...args) {
        //清除定时器
        if (timer) {
            clearTimeout(timer);
        }
        //设置函数执行时间
        timer = setTimeout(() => {
        	func.apply(this, args);
        }, ms);
    }
}

测试 :

javascript">const task = () => { console.log('run task') };
const debounceTask = debounce(task, 1000);
//鼠标连续点击,只会触发最后一次
window.addEventListener('click', debounceTask);

应用 :

  • 手机号、邮箱正则输入检测
  • 搜索框输入:用户最后一次输入完,再发送请求
  • 窗口大小:窗口调整完成后,计算窗口大小,防止重复渲染

公众号

关注公众号『前端也能这么有趣』,获取更多新鲜内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。


http://www.niftyadmin.cn/n/5229149.html

相关文章

利用GPU进行训练如何如何动态显示nvidia-smi的信息

使用watch命令 在Linux中,watch命令可以用来周期性地执行一个命令,并显示其输出。例如: watch -n 1 nvidia-smi这个命令会每秒执行一次nvidia-smi并显示其输出。你可以更改-n 1中的数字来改变更新频率(单位是秒)。 …

校园圈子系统丨交友丨地图找伴丨二手市场等功能丨源码交付支持二开丨APP小程序H5三端交付!

校园圈子系统是一款专为校园生活设计的智能应用,拥有丰富多样的功能模块,提供全方位的服务。无论您是师生还是校友,我们都为您打造了一个与校园紧密相连的交流平台。 通过校园圈子系统,您可以方便地浏览校内最新动态,包…

利用ARCGIS做地下水脆弱性评价分析

(一)行政边界数据、土地利用数据和土壤类型数据 本文所用到的河北唐山行政边界数据、土地利用数据和土壤类型数据均来源于中国科学院资源环境科学与数据中心(https://www.resdc.cn/Default.aspx)。 (二)地…

设计模式之美学习笔记-理论篇1-面向对象的特性

一、设计模式前言 面向对象 主流的编程范式或者是编程风格有三种,它们分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是这其中最主流的。现在比较流行的编程语言大部分都是面向对象编程语言。大部分项目也都是基于面向对象编程风格开发的。面向对…

⭐ Unity + ARKIT ARFace脸部追踪

相比之前的图像物体检测,这脸部检测实现起来会更加的简单。 (1)首先我们先在场景中的物体上添加一个AR Face Mananger组件: (2)以上組件的 Face Prefab所代表的就是脸部的模型也就是覆盖在脸部上面的投影模…

python用YOLOv8对图片进行分类

用yolov8的模型进行分类 先上效果图 图片资源 模型下载地址 https://github.com/ultralytics/ultralytics 代码 import matplotlib.pyplot as plt from ultralytics import YOLO from PIL import Image import cv2model YOLO(../ultralytics/yolov8n.pt)# print(model…

WordPress批量上传文章和自动发布文章的方法

专业介绍:WordPress批量上传文章技术解析 在现代数字时代,内容创作是网络存在的驱动力之一。对于博客作者、新闻编辑和内容管理员而言,高效地批量上传文章至WordPress平台是提高工作效率的一个关键方面。WordPress作为最受欢迎的内容管理系统…

homeassistant 随笔

1.使用mushroom-strategy自动生成ui,隐藏中文ares,名字为区域的拼音,例如显示厨房则真实名字为chu_fang 隐藏图片中的工作室 代码为: