JS节流和省钱是什么关系?

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。

都说花钱如流水,那么怎么攒到钱呢?除了努力挣钱,节流(即控制支出、减少不必要的开销)起到了非常重要的作用,大白话就是省钱。

JS中的节流和生活中的节流有异曲同工之妙,我们一起了解下吧,看下什么是节流、函数的实现、节流的应用场景、防抖和节流的区别、lodash的节流函数以及节流在框架中的使用。

一、什么是节流(Throttle)

节流技术确保函数在指定的时间间隔内最多只执行一次。比如说频繁点击,如果你希望在2s内,无论点击多少次,只执行1次,那就是节流,如果你持续点击,每隔2s都会触发执行。

二、函数实现

function throttle(fn, limit) {
  let inThrottle;
  return function () {
    const args = arguments, context = this;
    if (!inThrottle) {
      fn.apply(context, args);
      inThrottle = true;
      setTimeout(() => (inThrottle = false), limit);
    }
  };
}

使用示例

<button id="btn">测试节流</button>

<script>
  var btn = document.getElementById("btn");
  btn.onclick = throttle(function () {
    console.log("节流");
  }, 2000);
</script>

三、应用场景

节流适用于高频事件,如键盘输入、滚动事件、浏览器缩放、鼠标移动、连续按键等,同时要求每隔一段时间就执行一次的场景。也就是说,对于任意频繁操作,你只要想每隔一段时间才触发一次操作,那么就可以使用节流。

四、防抖和节流的区别

防抖(Debounce)和节流(Throttle)都是用来控制函数执行频率的技术,区别在于,以连续点击举例,限制频率为2s内触发一次事件,那么防抖的表现是两次点击的时间间隔只要小于2s,事件永远不会触发,大于2s时,执行一次,而节流的表现是,每隔2s事件触发一次。

五、lodash的节流函数

Lodash 是一个流行的 JavaScript 实用工具库,它提供了很多现成的函数式编程工具,包括节流(throttle)功能。

示例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Throttle</title>
    <script src="https://cdn.jsdelivr.net/npm/lodash@latest/lodash.min.js"></script>
  </head>
  <body>
    <button id="btn">测试节流</button>
    <script>
      var btn = document.getElementById('btn')
      btn.onclick = window._.throttle(function () {
        console.log('节流')
      }, 2000)
    </script>
  </body>
</html>

六、节流与框架

假设是百度的搜索框,每1s执行一次搜索请求,返回搜索建议的数据。我们看下Vue2、Vue3和React中都怎么使用节流。

Vue2

import _ from 'lodash';

export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  watch: {
    searchQuery: _.throttle(function (newValue) {
      console.log('搜索查询更新:', newValue);
      // 执行搜索逻辑
    }, 1000)
  },
  methods: {
    // 其他方法...
  }
}

Vue3

import _ from 'lodash';
import { reactive, watch } from 'vue';

const state = reactive({
  searchQuery: ''
});

const throttleSearch = _.throttle((newValue) => {
  console.log('搜索查询更新:', newValue);
  // 执行搜索逻辑
}, 1000);

watch(() => state.searchQuery, (newValue, oldValue) => {
  throttleSearch(newValue);
});

React

import React, { useState, useCallback } from 'react';
import _ from 'lodash'; // 引入Lodash库

const SearchComponent = () => {
  const [searchTerm, setSearchTerm] = useState('');

  const throttleSearch = useCallback(
    _.throttle((term) => {
      console.log('搜索:', term);
      // 执行搜索逻辑
    }, 1000),
    []
  );

  const handleInputChange = (event) => {
    setSearchTerm(event.target.value);
    throttleSearch(event.target.value);
  };

  return (
    <input
      type="text"
      value={searchTerm}
      onChange={handleInputChange}
      placeholder="输入搜索内容"
    />
  );
};

export default SearchComponent;

回到标题,总的来说,生活中节流可以控制开支,积累财富,JS的节流可以降低操作频率,优化页面性能。

好了,分享结束,谢谢点赞,下期再见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐爸muba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值