我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Javascript前端事件循环机制详细讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Javascript前端事件循环机制详细讲解

文章目录 一、消息队列和事件循环1.单线程处理机制2.事件循环机制3.消息队列4.IO线程5.页面使用单线程的缺点 二、setTimeout1.浏览器怎么实现 setTimeout2.使用setTimeout的一些注意事项 三、宏任务和微任务1.宏任务2.微任务

一、消息队列和事件循环

1.单线程处理机制

如果有一些确定好的任务,可以使用一个单一的线程来按顺序处理这些事情,等到所有任务执行完毕之后,退出当前线程。

int main(){
    int a, b;
    cin >> a;
    cin >> b;
    cout << a + b << endl;
    return 0;
}

2.事件循环机制

在单线程处理机制中,如果需要接收并处理新的任务,需要引入事件循环机制。

int main(){
    int a, b;
    while (true) {
        cin >> a;
        cin >> b;
        cout << a + b;
    }
    return 0;
}

3.消息队列

如果需要处理其他线程的任务,需要使用消息队列。

消息队列是一种数据结构,存放要执行的任务。它符合队列“先进先出”的特点,新增任务添加到队列的尾部,队列头部取出任务。

主线程在执行过程中,通过事件循环机制从消息队列中读取任务。

4.IO线程

在浏览器的渲染进程中,专门有一个IO线程用来接收其他进程传进来的消息。接收到消息后,会将这些消息组装成任务发送给主线程放入消息队列中。

5.页面使用单线程的缺点

(1)如何处理高优先级的任务

(2)如何解决单个任务执行时长过久的问题

二、setTimeout

1.浏览器怎么实现 setTimeout

在浏览器中,除了普通的消息队列之外,还有一个延迟任务的消息队列,包括了定时器和 Chromium 内部一些需要延迟执行的任务。所以当通过JavaScript创建定时器时,渲染进程会将该定时器的回调任务添加到延迟队列中。

加入延迟队列之后,事件循环线程中的执行过程就变成了,先执行一次正常消息队列中的任务,如果当前任务中有延迟事件,将该延迟事件加入到延迟任务消息队列,在该任务执行完之后,依次执行延迟队列中的到期任务。然后依次循环执行下去。

2.使用setTimeout的一些注意事项

(1)当前任务执行时间过长会影响定时器任务的执行。

(2)如果setTimeout存在嵌套调用,那么系统会设置最短时间间隔为4毫秒

(3)未激活的页面,setTimeout执行最小间隔是1000毫秒

(4)延时执行时间有最大值

三、宏任务和微任务

1.宏任务

渲染事件(如解析DOM、计算布局、绘制页面)

用户交互事件(点击、滚动、缩放) JavaScript脚本执行事件 网络请求、文件读写完成

(1)事件循环机制

先从消息队列中选出一个最老的任务,这个任务称为oldestTask然后循环系统记录任务开始执行时间,并将oldestTask设置为当前正在执行的任务当任务执行完成之后,删除当前正在执行的任务,并从消息队列中删除oldestTask最后统计执行完成的时长等信息

2.微任务

微任务就是一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前。

Dom添加、删除等操作Promise resolve和reject

(1)微任务和宏任务是绑定的,每个宏任务在执行时,会创建自己的微任务队列。

(2)微任务的执行时长会影响到当前宏任务的时长

(3)在一个宏任务中,分别创建一个用于回调的宏任务和微任务,无论什么情况下,微任务都早于宏任务执行。

到此这篇关于Javascript前端事件循环机制详细讲解的文章就介绍到这了,更多相关Javascript事件循环机制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Javascript前端事件循环机制详细讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Javascript前端事件循环机制详细讲解

单线程的同步等待极大影响效率,任务不得不一个一个等待执行,对于网页应用是无法接受的。所以Javascript使用事件循环机制来解决异步任务的问题。本文就来讲讲Javascript的事件循环机制,希望对你有所帮助
2022-12-30

详解JavaScript事件循环

JavaScript事件循环是一种机制,用于处理异步事件和回调函数。它是JavaScript运行时环境的一部分,负责管理事件队列和调用栈。文章中有详细的代码示例,需要的朋友可以参考一下
2023-05-16

JavaGUI事件监听机制超详细讲解

Java事件监听器是由事件类和监听接口组成,自定义一个事件前,必须提供一个事件的监听接口以及一个事件类。JAVA中监听接口是继承java.util.EventListener的类,事件类继承java.util.EventObject的类
2023-03-03

JS的事件循环执行机制详解

JS执行是单线程的,它是基于事件循环的,那么本篇博文就来分享一下关于JS的事件循环执行机制,感兴趣的小伙伴可以跟着小编一起来学习
2023-05-19

MyBatis插件机制超详细讲解

MyBatis在四大对象的创建过程中,都会有插件进行介入。插件可以利用动态代理机制一层层的包装目标对象,而实现在目标对象执行目标方法之前进行拦截的效果
2022-11-13

web前端:关于javascript的事件执行机制理解

编程学习网:Javascript最初受java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。
web前端:关于javascript的事件执行机制理解
2024-04-23

vue.js的事件循环机制如何理解

这篇文章主要介绍了vue.js的事件循环机制如何理解的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.js的事件循环机制如何理解文章都会有所收获,下面我们一起来看看吧。一、事件循环机制介绍 JS
2023-06-29

深入了解Node事件循环(EventLoop)机制

主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。下面本篇文章就来带大家掌握Node.js中的eventloop,希望对大家有所帮助!
2023-05-14

JavaScript中的事件循环机制及其运行原理

JavaScript中的事件循环机制是一种异步处理机制,通过维护事件队列和消息队列,实现任务的分发和执行。事件循环机制由主线程和任务队列构成,主线程运行完当前任务后会检查任务队列中是否有待执行的任务,如有则执行,否则等待
2023-05-18

编程热搜

目录