Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

    • 兼容ie7的水平无限滚动
    • 节流防抖
    • 数组乱序
    • 开启全屏
    • 数据类型
    • 变量提升
    • this调用指向
    • 原型及原型扩展
    • js获取元素属性精度问题
    • setTimeout和setInterval
    • 数组判断
    • dom节点添加或插入元素
    • var、let和const的区别
    • 判断ellipsis是否省略生效
    • 使用ResizeObserver监听元素size变化
    • js自定义事件
    • use strict详解
    • 私有属性
    • js实现类的方式
    • call和apply的理解和使用
    • js失焦和点击事件顺序冲突
    • js中不常见但非常实用的运算符
    • for of和for in的区别
    • defer和async的区别
    • promise值穿透
    • js为什么会出现数字精确度丢失
    • js禁用F12开发者模式
    • 使用scrollTop和scrollTo滚动到目标位置
    • js实现打字机效果
    • 多种方式实现数组去重
    • 替换使用setTimeout
    • encodeURI和encodeURIComponent的区别
    • canvas实现弹跳小球
    • js实现跨标签页通信
    • 事件循环与微任务、宏任务
    • 浏览器存储数据方式
    • 常见的meta元数据使用
    • 使用InterSectionObserver判断元素区域(chatGPT)
  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

  • 前端
  • JavaScript
kros
2025-08-08

替换使用setTimeout

setTimeout是JavaScript中常用的定时器函数,但它存在一些重要的缺陷

  • 定时不精确,由于 JavaScript 的单线程特性,setTimeout不能保证在精确的时间后执行
  • 性能会有影响,setTimeout执行时间不确定,可能会导致主线程卡顿

JavaScript提供了另外两种类似的函数,在某些场景中比setTimeout更加适用

# requestAnimationFrame

requestAnimationFrame函数要求传入一个回调函数,调用后会在下一次重绘之前,调用用户提供的回调函数,该函数主要用于解决动画卡顿的问题。详情见官方文档:window.requestAnimationFrame

function animate() {
	requestAnimationFrame(animate)
}

animate()
1
2
3
4
5

requestAnimationFrame完美地解决了高优先级视觉任务的调度问题,但如果我们将一个非紧急、耗时较长的后台任务(比如发送日志、数据预处理)放进requestAnimationFrame,就又回到了老问题:它仍然会阻塞关键的渲染路径,导致卡顿。

# requestIdleCallback

requestIdleCallback(callback, options)函数的核心是在浏览器主线程的“空闲时期”执行低优先级的回调函数。该函数同样要求传递回调函数,但它只会在主线程空闲时才会调用不影响性能。为了保证回调函数被执行,可在options参数中传入timeout数值,如果回调在timeout毫秒过后还没有被调用,那么回调任务将放入事件循环中排队,即使这样做有可能对性能产生负面影响。详见官方文档:window.requestIdleCallback

requestIdleCallback(() => {
	console.log('Browser is free')
})
1
2
3

requestIdleCallback函数可将阻塞任务调度到“空闲”时期执行可极大的提高用户体验。同时requestIdleCallback函数返回一个ID值,可以调用cancelIdleCallback函数取消回调执行。

上次更新: 2025/09/05, 8:09:00
多种方式实现数组去重
encodeURI和encodeURIComponent的区别

← 多种方式实现数组去重 encodeURI和encodeURIComponent的区别→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev