「整理总结」前端必须要掌握的3种定时任务

1. 前言

在前端开发中,有时候需要在指定的时间或者间隔时间内执行一些任务,比如定时刷新数据、轮询接口、定时检测在线状态等等。这些任务都需要使用定时任务来实现,本文将介绍前端必须要掌握的3种定时任务。

2. setInterval()

2.1 基本使用

setInterval() 是 JavaScript 内置的一个函数,该函数可以按照指定的时间间隔(单位是毫秒)调用函数或计算表达式,周期性地执行任务。它的基本语法如下:

setInterval(function, delay)

其中,第一个参数指定要周期性执行的函数或表达式,第二个参数是时间间隔(单位是毫秒)。下面是一个简单的例子:

let count = 0;

let intervalId = setInterval(function() {

console.log(count);

count++;

}, 1000);

上面的代码会每隔1秒钟打印一次 count 的值,并且不断地增加 count,直到页面被关闭或者通过 clearInterval(intervalId) 进行清除。

2.2 注意事项

尽管 setInterval() 在编写周期任务时非常有用,但仍需要注意以下几点:

如果代码需要处理大量计算,那么它将会大大降低性能。

由于 setInterval() 函数返回的是一个 ID,因此在使用 clearInterval() 取消计时器时需要保存这个 ID。

如果调用 setInterval() 的时间间隔大于代码执行时间,那么可能会导致代码重复执行(即任务堆积)。

3. setTimeout()

3.1 基本使用

setTimeout() 也是 JavaScript 内置的一个函数,它可以按照指定的时间间隔(单位是毫秒)调用函数或计算表达式,但是它只会执行一次。它的基本语法如下:

setTimeout(function, delay)

其中,第一个参数指定要执行的函数或表达式,第二个参数是时间间隔(单位是毫秒)。下面是一个简单的例子:

setTimeout(function() {

console.log('Hello, world!');

}, 1000);

上面的代码会在1秒钟后打印一次 "Hello, world!",并且只会执行一次。

3.2 在定时任务中设置计时器

setTimeout() 函数也可以在定时任务中使用,例如下面这个例子:

let count = 0;

setTimeout(function run() {

console.log(count);

count++;

setTimeout(run, 500);

}, 500);

上面的代码会每隔0.5秒钟打印一次 count 的值,并且不断地增加 count,直到页面被关闭或者通过 clearInterval(intervalId) 进行清除。

3.3 注意事项

虽然 setTimeout() 函数比 setInteval() 函数更加灵活,但仍需要注意以下几点:

如果第二次调用 setTimeout() 的时间间隔大于代码执行时间,那么它会等待第一个 setTimeout() 执行完毕才会立即执行。

在 setTimeout() 函数中使用 setInterval() 函数来实现周期任务也是一种很有效的方式。

4. requestAnimationFrame()

4.1 基本使用

requestAnimationFrame() 是一个浏览器原生的定时任务 API,可以用于实现周期性任务。与 setInterval() 不同,requestAnimationFrame() 会在下一次浏览器绘制前执行,以保持最佳帧率和性能。它的基本语法如下:

requestAnimationFrame(function)

其中,第一个参数是一个 callback 函数,表示要执行的周期任务。下面是一个简单的例子:

let count = 0;

function run() {

console.log(count);

count++;

requestAnimationFrame(run);

}

requestAnimationFrame(run);

上面的代码会不断地打印 count 的值,并且不断地增加 count,直到页面被关闭。

4.2 注意事项

尽管 requestAnimationFrame() 在执行周期任务时非常有用,但仍需要注意以下几点:

在移动设备和旧版浏览器上,requestAnimationFrame() 可能存在兼容性问题,需要进行降级处理。

如果在 requestAnimationFrame() 中进行大量计算,那么可能会导致页面卡顿。

如果周期任务需要立即执行,那么建议使用 setInterval() 或 setTimeout()。

5. 总结

本文介绍了前端必须要掌握的3种定时任务:setInterval()、setTimeout() 和 requestAnimationFrame()。每种定时任务都有其特点和注意事项,需要根据具体需求进行选择。