JavaScript中计时器requestAnimationFrame、setTimeout、setInterval、setImmediate的使用和区别

在JavaScript中,我们经常使用requestAnimationFramesetTimeoutsetIntervalsetImmediate来控制代码的执行时机。它们各有特点和适用场景:

1. requestAnimationFramerequestAnimationFrame主要用于浏览器动画渲染。这个函数允许你在下一次浏览器重绘前调用一个函数。它提供了一个高精度的时间戳,可以在函数内部使用。由于浏览器可以在重绘前执行动画,这可以提高动画效果的性能。

使用:

function animate() {
  // 动画逻辑
  requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

2. setTimeoutsetTimeout用于在指定的时间后执行一次回调函数。它返回一个timeoutID,可以用来取消这个计时器。

使用:

const timeoutID = setTimeout(function() {
  // 任务代码
}, 2000); // 2秒后执行

// 取消计时器
clearTimeout(timeoutID);

3. setIntervalsetInterval用于每隔一定时间间隔重复执行回调函数。它同样返回一个intervalID,可以用来取消这个计时器。

使用:

const intervalID = setInterval(function() {
  // 任务代码
}, 1000); // 每隔1秒执行一次

// 取消计时器
clearInterval(intervalID);

4. setImmediatesetImmediate的功能类似于setTimeout,但是它会在当前事件循环结束后立即执行回调函数,而不是等待指定的时间。需要注意的是,setImmediate并不是所有浏览器都支持,主要用于Node.js环境。

使用(Node.js环境):

const immediateID = setImmediate(function() {
  // 任务代码
});

// 取消立即执行
clearImmediate(immediateID);

 

这四个方法的执行时机有所不同:

1. requestAnimationFrame

requestAnimationFrame 的执行时机是在浏览器准备好绘制下一帧屏幕时,也就是在浏览器每次重绘页面之前。这样可以让动画更加流畅,并且避免不必要的计算。当页面处于隐藏状态时,requestAnimationFrame 不会运行,这样可以减少资源的浪费。

2. setTimeout

setTimeout 的执行时机是在指定的延迟时间之后,只会执行一次。具体执行时间可能会因为浏览器当前的工作负载而有所偏差。

3. setInterval

setInterval 的执行时机是在指定的时间间隔之后,每隔指定的时间就会执行一次,直到被清除。

4. setImmediate

setImmediate 的执行时机是在当前事件循环迭代结束后立即执行,相当于将回调函数插入到事件队列的头部。

综上所述,requestAnimationFrame 的执行时机与浏览器的重绘时间有关,setTimeout setInterval 的执行时机与指定的时间间隔有关,而 setImmediate 的执行时机则是在当前事件循环迭代结束后立即执行。

 

这四个方法之间的区别如下:

1. requestAnimationFrame

- 用于动画效果的开发,以优化动画的性能。
- 在浏览器准备好绘制下一帧屏幕时调用传入的回调函数。
- 不会在页面隐藏或最小化时运行,从而减少资源浪费。
- 调用频率与屏幕刷新率同步,可以提供平滑的动画效果。

2. setTimeout

- 延迟一定时间后调用传入的回调函数。
- 仅调用一次。
- 时间精度不太准确,会受到浏览器当前忙碌程度的影响。
- 用于创建简单的计时器、轮询和非重要操作。

3. setInterval

- 在一定时间间隔后调用传入的回调函数,直到被清除。
- 可以用于创建重复执行的计时器、轮询和非重要操作。
- 时间精度不太准确,同样会受到浏览器当前忙碌程度的影响。

4. setImmediate

- 在当前事件循环迭代结束后立即执行传入的回调函数。
- 相当于将回调函数插入到事件队列的头部。
- 用于在一些异步操作完成后立即执行回调函数。

 

总体而言,requestAnimationFrame 适用于动画开发,setTimeout setInterval 适用于计时器、轮询等需要延迟执行的操作,而 setImmediate 则适用于需要立即执行的回调函数。

 

原文链接:https://www.cnblogs.com/ronaldo9ph/p/17284643.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中计时器requestAnimationFrame、setTimeout、setInterval、setImmediate的使用和区别 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • vue视图响应式更新详细介绍

    下面我将详细讲解“vue视图响应式更新详细介绍”的完整攻略。 什么是Vue的视图响应式? Vue是一个响应式MVVM框架,通过Vue实现响应式数据绑定。所谓响应式数据绑定就是当数据变化时,视图自动更新。我们可以通过Vue提供的“数据劫持+发布订阅”机制实现数据的响应式更新。当我们修改数据时,Vue会自动更新dom元素。 Vue的响应式数据更新原理 Vue通过…

    JavaScript 2023年6月10日
    00
  • JavaScript中圆括号()和方括号[]的特殊用法疑问解答

    下面是关于“JavaScript中圆括号()和方括号[]的特殊用法疑问解答”的完整攻略。 JavaScript中圆括号()的特殊用法 1. 函数调用 在JavaScript中,我们使用圆括号来调用函数,可以传递参数给函数。例如: function sayHello(name) { console.log(`Hello, ${name}!`); } sayHe…

    JavaScript 2023年6月10日
    00
  • javascript跑马灯抽奖实例讲解

    下面我将详细讲解“JavaScript跑马灯抽奖实例讲解”的完整攻略,包括示例说明: 1. 介绍 在网页中,常常需要用到一些动态效果来吸引用户,其中跑马灯和抽奖都是常见的实现方式。在本文中,我们将学习如何使用JavaScript实现跑马灯抽奖效果。 2. 实现原理 跑马灯抽奖是根据随机数来获取中奖结果的,而文字的滚动效果则是通过定时器来实现的。下面是实现跑马…

    JavaScript 2023年6月11日
    00
  • JS实现轮播图效果的3种简单方法

    JS实现轮播图效果的3种简单方法 1. 利用定时器来实现轮播图效果 首先,我们需要先定义图片数组,以便进行遍历,设置一个计数器,每隔一段时间,计数器加1,通过计数器来更改图片。 HTML代码: <div id="slider"> <img src="img1.jpg" alt="图片一&qu…

    JavaScript 2023年6月11日
    00
  • js对数组中的数字从小到大排序实现代码

    要实现JS对数组中的数字从小到大排序,可以使用JavaScript内置的sort()方法。下面是具体实现步骤: 步骤1:创建一个数字数组 首先,创建一个数组,其中包含要排序的数字。例如let arr=[9,8,7,6,5,4,3,2,1]; 步骤2:编写JS sort()方法 sort()是JS中的内置方法,可以将数组中的元素按照指定的规则排序。在本例中,我…

    JavaScript 2023年5月27日
    00
  • Javascript Boolean prototype 属性

    以下是关于JavaScript Boolean.prototype属性的完整攻略。 JavaScript Boolean.prototype属性 JavaScript Boolean.prototype属性是Boolean对象的原型属性,它允许您向所有Boolean对象添加属性和方法。该属性是动态的,可以通过Boolean对象的实例访问。 下面是一个使用Bo…

    JavaScript 2023年5月11日
    00
  • 用原生 JS 实现 innerHTML 功能实例详解

    让我来详细讲解如何用原生 JS 实现 innerHTML 功能。 1. innerHTML 功能是什么? 在了解如何用原生 JS 实现 innerHTML 功能前,我们需要先了解一下 innerHTML 功能是什么。innerHTML 是一个 DOM 属性,可以将 HTML 代码添加或替换到指定元素内部。 例如,我们有如下 HTML 代码: <div …

    JavaScript 2023年6月10日
    00
  • 简单了解three.js 着色器材质

    了解three.js中着色器材质需要掌握一些基础知识,包括WebGL和着色器语言,以下是简要介绍: WebGL是一种基于浏览器的图形技术,使用GPU加速渲染三维图形,支持多种着色器材质。 着色器是一种程序,用于定制渲染模型的外观和行为,通过GPU进行加速渲染,包括片元着色器和顶点着色器两种类型。 three.js是WebGL的一个库,提供了主流的三维图形渲染…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部