【JavaScript】JS优化:防抖与节流

【防抖】

一般应用在计算页面滚动条距离,页面resize,输入框blur之类的场景,当用户操作时,一般会多次触发,造成过多的资源浪费,此时可以使用防抖

let debounce = function (action, delay) {
    let timer = null;

    return function () {
        // 当用户再次触发方法的时候,清除重新计时
        clearTimeout(timer);
        timer = setTimeout(() => {
            // 直到用户在delay时间内,没有再次操作触发方法,才真正执行逻辑
            action.apply(this, arguments);
        }, delay);
    };
};

// 具体想实现的逻辑
function operationFn() {
    console.log("debounce---");
}

// 触发
window.onclick = debounce(operationFn, 500);

【节流】

当用户一直做操作,在我们限定的时间内,我们就无法真正实现逻辑,但是产品却需要在5s内必须执行一次,则此时可以使用节流

let throttle = function (action, delay) {
    let statTime = 0;

    return function () {
        let currTime = +new Date();
        // '+'的目的是通过隐式类型转换将该数据类型转换为Number类型,若转换失败,则返回NaN;
        if (currTime - statTime > delay) {
            // 在delay时间到了的时候,必须会执行一次
            action.apply(this, arguments);
            statTime = currTime;
        }
    };
};

// 具体要实现的逻辑
function operationFn() {
    console.log("throttle---");
}

window.onclick = throttle(operationFn, 1000);

【参考文章】

https://www.jianshu.com/p/7890fd811f6e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值