• js的节流和防抖详解


    防抖和节流是JavaScript中的常见优化技巧,它们可以帮助我们控制代码在特定的时间间隔内执行的频率,从而优化性能。下面详细讲解它们的原理和使用方法。

    防抖(Debounce):

    防抖的原理是当一个事件频繁触发时,只有在停止触发一段时间后,才会执行相应的代码。比如用户在输入框中连续输入,我们不必要每次都去响应用户的输入,而是在用户停止输入一段时间后再去响应。

    防抖的实现方法很简单,通过设置一个定时器,来延迟执行函数。如果在定时器执行之前,又触发了该事件,就取消定时器,并重新设置一个新的定时器。

    使用示例:

    1. function debounce(func, delay) {
    2. let timer;
    3. return function() {
    4. clearTimeout(timer);
    5. timer = setTimeout(() => {
    6. func.apply(this, arguments);
    7. }, delay);
    8. }
    9. }
    10. const debouncedFunc = debounce(() => {console.log('执行');}, 1000);
    11. debouncedFunc();
    12. debouncedFunc();
    13. debouncedFunc(); //只会输出一次“执行”

    节流(Throttle):

    节流的原理是当一个事件频繁触发时,只会在特定的时间间隔内执行一次相应的代码。比如在滚动页面的时候,我们不必要每次都去响应滚动事件,而是在特定的时间间隔内去响应。

    节流的实现方法也很简单,在每次执行代码之前,先判断当前时间间隔是否达到了预设的时间间隔,如果达到了,就执行相应的代码,并重新设置计时器;如果没达到,就忽略这次触发。

    使用示例:

    1. function throttle(func, delay) {
    2. let timer;
    3. let lastTime = 0;
    4. return function() {
    5. const currentTime = new Date().getTime();
    6. if (currentTime - lastTime >= delay) {
    7. lastTime = currentTime;
    8. func.apply(this, arguments);
    9. } else {
    10. clearTimeout(timer);
    11. timer = setTimeout(() => {
    12. lastTime = currentTime;
    13. func.apply(this, arguments);
    14. }, delay - (currentTime - lastTime));
    15. }
    16. }
    17. }
    18. const throttledFunc = throttle(() => {console.log('执行');}, 1000);
    19. throttledFunc();
    20. throttledFunc();
    21. throttledFunc(); //只会输出两次“执行”

    总结:

    防抖和节流都是常见的优化技巧,它们能控制代码的执行频率,优化性能,提高用户体验。需要根据具体的场景选择使用哪一种技巧。

  • 相关阅读:
    Android 13 - Media框架(8)- MediaExtractor(2)
    从零开始利用MATLAB进行FPGA设计(七)用ADC采集信号教程2
    php后台接口异步操作的实践
    使用QT实现一个简单的记事本(C++)
    P1534 不高兴的津津(升级版)
    Stable Diffusion 的提示词使用技巧
    【从零开始学习Redis | 第五篇】基于布隆过滤器解决Redis的穿透问题
    PyG-GCN-Cora(在Cora数据集上应用GCN做节点分类)
    (十九)ATP应用测试平台——springboot集成RocketMQ案例实战
    LVS集群
  • 原文地址:https://blog.csdn.net/song19990524/article/details/134019283