防抖和节流

函数防抖(debounce)

就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。(就是让某个函数在上一次执行之后,满足等待某个时间内不再触发此函数后再执行,而在这个等待时间内再次触发函数,等待时间可以重新计算,知道该函数在一定间隔内没有被调用时,才开始执行被调用方法)
应用场景:用户注册时候的手机号验证和邮箱验证,搜索框,页面上下滚动
假设我们网站有个搜索框,用户输入文本我们会自动联想匹配出一些结果供用户选择。我们可能首先想到到的做法就是监听keypress事件,但是如果用户快速的输入一连串字符,假设是10个字符,就会在瞬间触发了10次请求。我们想要的是用户停止输入的时候才去触发查询的请求,这个时候函数防抖可以帮助我们。

function debouce(func,wait) {
        let timer;
        return function(){
            if(timer)  clearTimeout(timer);
            timer = setTimeout(()=>func(),wait)
        }
    }


函数节流(throttle):所谓节流,就是指连续触发事件但是在N秒中只执行一次函数)节流会稀释函数的执行频率。让一个函数无法在很短的时间间隔内连续调用,当上一次执行完之后过了规定的时间间隔,才能进行下一次的函数调用。避免函数的过多执行
应用场景:window对象的resize、scroll事件拖拽时候的mousemove射击游戏中的mousedown、keydown事件文字输入、自动完成的keyup事件

function throttle(func,wait) {
        let previous = new Date();
        return function(){
            let now = new Date();
            if(now - previous > wait){
                previous = now;
                func();
            }
        }
    }
    //节流2(setTimeout)
    function throttle2(func,wait) {
        let timer;
        return function () {
            if (!timer) {
                timer = setTimeout(() => {
                    func();
                    timer = null; // clearTimeout(timer) 错误
                }, wait);
            }
        }
    }

 全部代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #count{
            height: 100px;
            background-color: darkgrey;
            text-align: center;
            display: flex;
            align-items: center;
        }
    </style>
</head>
<body>
<div id="count"></div>
</body>
<script>
    var countDiv = document.getElementById('count');
    function add() {
        countDiv.innerText++;
    }
    //原始
    countDiv.onmousemove = add;
    //优化
    countDiv.onmousemove = throttle2(add,500);

    //防抖(setTimeout)
    function debouce(func,wait) {
        let timer;
        return function(){
            if(timer)  clearTimeout(timer);
            timer = setTimeout(()=>func(),wait)
        }
    }

    //节流1(比较时间差)
    function throttle(func,wait) {
        let previous = new Date();
        return function(){
            let now = new Date();
            if(now - previous > wait){
                previous = now;
                func();
            }
        }
    }
    //节流2(setTimeout)
    function throttle2(func,wait) {
        let timer;
        return function () {
            if (!timer) {
                timer = setTimeout(() => {
                    func();
                    timer = null; // clearTimeout(timer) 错误
                }, wait);
            }
        }
    }

</script>
<!--
1、什么是函数防抖函数防抖(debounce):就是让某个函数在上一次执行之后,满足等待某个时间内不再触发此函数后再执行,而在这个等待时间内再次触发函数,等待时间可以重新计算,知道该函数在一定间隔内没有被调用时,才开始执行被调用方法
(所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。)
2、应用场景用户注册时候的手机号验证和邮箱验证搜索框

假设我们网站有个所搜框,用户输入文本我们会自动联想匹配出一些结果供用户选择。
我们可能首先想到到的做法就是监听keypress事件,然后异步去查询结果这个方法本事是没有错的,但是如果用户快速的输入一连串字符,假设是10个字符,就会在瞬间触发了10次请求,这无疑不是我们想要的。我们想要的是用户停止输入的时候才去触发查询的请求,这个时候函数防抖可以帮助我们。


1、什么是函数节流函数节流(throttle):是让一个函数无法在很短的时间间隔内连续调用,当上一次执行完之后过了规定的时间间隔,才能进行下一次的函数调用。
(所谓节流,就是指连续触发事件但是在N秒中只执行一次函数)节流会稀释函数的执行频率。即每间隔某个事件去执行某个函数,避免函数的过多执行,这个方式就叫函数节流
2、应用场景window对象的resize、scroll事件拖拽时候的mousemove射击游戏中的mousedown、keydown事件文字输入、自动完成的keyup事件
-->
</html>

 

内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序清理。 阅读建议:由于本资源涉及较多底层概念技术细节,建议读者先复习C语言基础知识,特别是指针内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值