JS 性能优化之节流
2023-06-13 09:15:40 时间
1. 节流介绍
节流: n 秒内只运行一次,若在 n 秒内重复触发,只有第一次生效
节流的应用场景:
1. 滚动加载: 监听页面滚动到底部的时候触发 2. 拖拽场景: 固定时间只执行一次,防止高频率的位置变动
2. 滚动加载-节流处理
首先编写监听页面滚动距离的方法,当向下滑动时,可以看到控制台执行了很多次的输出,如果我们要根据页面滑动距离来计算代码逻辑,这样频繁的执行计算会非常损耗系统性能,我们可以使用节流来优化这个问题
<style>
body {
height: 2000px;
background: lightsalmon;
}
</style>
<script>
let count = 1
function scrollFn() {
console.log('监听页面滚动次数: ', count++);
}
document.onscroll = scrollFn
</script>
节流的实现思路:
1. 借助 setTimeout 定时器,控制事件回调是否执行 2. 获取每次事件执行的时间与上一次执行的时间差 3. 判断时间差是否已超过设定的时间间隔,超过时立即执行函数,没有超过时取消后续的定时器任务 4. 最后一次事件的触发,会执行完成
使用节流函数优化后的代码:
// 节流函数
function throttle(fn, time) {
// 上一次的执行时间
let pre = 0
let timeout = null
return function (...args) {
const now = Date.now()
// 时间差超过了设定的时间间隔
if (now - pre > time) {
pre = now
fn.apply(this, args)
} else {
// 没有超过设定的时间间隔,则后续的事件会直接清除
if (timeout) {
clearTimeout(timeout)
timeout = null
}
// 最后一次的事件会触发
timeout = setTimeout(() => {
pre = now
fn.apply(this, args)
}, time);
}
}
}
document.onscroll = throttle(scrollFn, 300)
相关文章
- Fabric.js 使用纯色遮挡画布(前景色)
- 使用 Dapr JS SDK 让 Nest.js 集成 Dapr(微软开源的分布式应用程序运行时)
- php 中js跳转页面跳转页面,js跳转代码_PHP页面跳转 Js页面跳转代码[通俗易懂]
- Js排序算法_js 排序算法
- 【愚公系列】2022年09月 微信小程序-three.js绘制正方体
- JS设置定时器_js设置定时器
- Nest.js 这么大的项目是怎么优化 ts 编译性能的?
- JS引擎(1):JS引擎擂台赛,JavaScript引擎的特征比较及术语科普
- JS 按自定义格式 拼接二进制串 解析二进制串
- JS getComputedStyle()方法和currentStyle属性
- JS函数(function)定义
- 使用Redis和JS优化网页性能(redisjs)
- nodejs使用Node.js优雅地整合MongoDB(mongodb整合)
- 使用JS实现Redis数据读取(js读取redis)
- 使用JS在网页中连接Oracle数据库(js网页链接oracle)
- js通用滑动门类
- js数组操作代码集锦
- js实现的跟随鼠标移动的时钟效果(中英文日期显示)
- 原生js拖拽(第一课未兼容)拖拽思路
- js获取下拉列表框<option>中的value和text的值示例代码
- JS将所有对象s的属性复制给对象r(原生js+jquery)
- 引入autocomplete组件时JS报未结束字符串常量错误