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

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

说在前面

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

函数节流

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

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

测试 :

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

应用:

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

函数防抖

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

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

测试 :

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

应用 :

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

公众号

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

说在后面

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

目录
相关文章
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:如何提升页面加载速度与用户体验?
在当今互联网时代,用户对网页加载速度的要求越来越高。本文将介绍前端性能优化的重要性,并提供一些实用的技巧和策略,帮助开发者提升页面加载速度,从而提升用户体验。
|
1月前
|
缓存 UED 开发者
【专栏:交互与用户体验篇】网页加载动画与用户等待体验
【4月更文挑战第30天】网页加载动画在现代设计中扮演重要角色,通过提供视觉反馈和分散注意力,改善用户体验。本文讨论了设计加载动画的原因和类型,如进度指示器、旋转指针、动态图标、模糊效果和文本提示,并提出了设计最佳实践:简洁相关、快速明确、考虑不同设备和避免误导。优化加载策略,如首屏内容优先加载和懒加载,也是提升用户体验的关键。设计时需注重实用性、品牌一致性和跨平台兼容性,确保在加载延迟时仍能给用户留下良好印象。
|
1月前
|
存储 前端开发 JavaScript
【亮剑】在Web开发中,滚动事件(onScroll)是一个常见且强大的交互手段。
【4月更文挑战第30天】在React中,利用`onScroll`事件可实现无限滚动、动态加载和视差效果。通过`componentDidMount`和`componentWillUnmount`(类组件)或`useEffect`(函数组件)添加/移除滚动监听器。为了优化性能,需注意节流、防抖、虚拟滚动和避免同步计算。实战案例展示了如何结合Intersection Observer实现无限滚动列表,当最后一个帖子进入视口时加载更多数据。关注性能,确保应用流畅。
|
1月前
|
前端开发 JavaScript 网络协议
【专栏】探讨了前端性能优化中的 Performance 工具,它能帮助开发者分析页面加载速度和交互体验
【4月更文挑战第29天】本文探讨了前端性能优化中的 Performance 工具,它能帮助开发者分析页面加载速度和交互体验。通过 Performance,可检测资源加载时间、JavaScript 执行时间、重绘与回流等关键指标,找到性能瓶颈。文中列举了三个实践案例,如优化图片加载、减少 JavaScript 执行时间和避免重绘回流,展示如何利用 Performance 改进页面性能,提升用户体验。开发者应定期使用 Performance 分析并学习新优化技术,以适应Web开发的快速发展。
|
1月前
|
前端开发 UED
React 窗口防抖:提升网页性能的利器
React 窗口防抖:提升网页性能的利器
22 0
|
1月前
|
前端开发 JavaScript UED
节流防抖:提升前端性能的秘密武器(下)
节流防抖:提升前端性能的秘密武器(下)
节流防抖:提升前端性能的秘密武器(下)
|
1月前
|
前端开发 JavaScript UED
节流防抖:提升前端性能的秘密武器(上)
节流防抖:提升前端性能的秘密武器(上)
|
8月前
|
前端开发
前端性能优化之防抖&节流
前端性能优化之防抖&节流
41 0
|
前端开发
前端学习案例1-防抖和节流1
前端学习案例1-防抖和节流1
58 0
前端学习案例1-防抖和节流1
|
前端开发
前端学习案例3-防抖和节流3
前端学习案例3-防抖和节流3
55 0
前端学习案例3-防抖和节流3

热门文章

最新文章