欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 学习记录-js进阶-性能优化

学习记录-js进阶-性能优化

2025/3/22 23:38:54 来源:https://blog.csdn.net/sinbowper/article/details/146382613  浏览:    关键词:学习记录-js进阶-性能优化

目录

  • 性能优化分类
  • 实现效果
  • 性能优化实现步骤
      • 1. 准备阶段
      • 2. 防抖函数
      • 3. 节流函数
      • 4. 调用函数
  • 完整实例代码

性能优化分类

防抖和节流

实现效果

防抖
在这里插入图片描述
节流
在这里插入图片描述

性能优化实现步骤

1. 准备阶段

理解防抖节流的概念以及基本的实现方法

  1. 防抖:在事件执行过程中,如果被打断,则重新开始计时,只执行最后一次。一般用于鼠标移动事件,页面滚动事件等高频率触发事件
  2. 节流:在事件执行过程中,如果重复执行,则不中断,直到本次事件执行完毕后,在执行下一次事件,同样用于高频率触发事件

2. 防抖函数

判断是否有定时器,如果有则清除定时器,如果没有则启动计时器

  1. 函数传入两个参数,第一个为执行函数,第二个为执行时间
  2. 函数体要写到return中回调,使之重复执行
	function debounce(fun, t) {let timerreturn function () {if (timer) clearTimeout(timer)			//如果存在定时器,则清除定时器timer = setTimeout(() => {fun()}, t)}}

3. 节流函数

判断是否有定时器,只有当不存在定时器的时候,启动计时器

  1. 定时器的返回值为数字
  2. 一般情况下,定时器内部无法清除定时器,所以要使用timer=null的方式来清除定时器
		function throttle(fun, t) {let timer = nullreturn function () {if (!timer) {timer = setTimeout(() => {fun()timer = null					//使用timer=null清除定时器}, 1000)}}}

4. 调用函数

	function fn1() {				//定义执行函数console.log(111111111)		}document.querySelector('.box').addEventListener('mousemove', throttle(fn1, 1000))			//调用性能优化函数

完整实例代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {height: 400px;width: 400px;background-color: black;margin: 200px 100px;}</style>
</head><body><div class="box"></div>
</body></html>
<script>function fn1() {console.log(111111111)}document.querySelector('.box').addEventListener('mousemove', throttle(fn1, 1000))// 防抖function debounce(fun, t) {let timerreturn function () {if (timer) clearTimeout(timer)timer = setTimeout(() => {fun()}, t)}}// 节流function throttle(fun, t) {let timer = nullreturn function () {if (!timer) {timer = setTimeout(() => {fun()timer = null}, 1000)}}}
</script>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词