首页 > 其他分享 >浏览器中的 事件循环 event loop

浏览器中的 事件循环 event loop

时间:2024-10-21 11:32:47浏览次数:9  
标签:异步 浏览器 队列 代码 任务 循环 执行 event loop

当浏览器碰到异步代码:异步代码会放到队列。队列有两种。微任务队列和宏任务队列。

执行栈与任务队列
JS 在解析一段代码时,会将同步代码按顺序排在某个地方,即执行栈,然后依次执行里面的函数。

当遇到异步任务时就交给其他线程处理,待当前执行栈所有同步代码执行完成后,会从一个队列中去取出已完成的异步任务的回调加入执行栈继续执行,遇到异步任务时又交给其他线程,…,如此循环往复。

而其他异步任务完成后,将回调放入任务队列中待执行来取出执行,


JS 按顺序执行执行栈中的方法,每次执行一个方法时,会为这个方法生成独有的执行环境(上下文context),待这个方法执行完成后,销毁当前的执行环境,并从栈中弹出此方法(即消费完成),然后继续下一个方法。

 

在事件驱动的模式下,至少包含了一个执行循环来检测任务队列是否有新的任务。通过不断循环去取出异步回调来执行,这个过程就是事件循环,而每一次循环就是一个事件周期或称为一次tick。

 

部分内容copy与其他作者。

 

我理解的事件循环一个代码执行周期。 先执行同步代码。碰到宏任务就加入。碰到微任务也加入。如果同时完成。微任务优先。

 

标签:异步,浏览器,队列,代码,任务,循环,执行,event,loop
From: https://www.cnblogs.com/liuliu-hai/p/18489126

相关文章

  • HCI_LE_Set_Event_Mask(0x0001)命令全面解析
    目录一、命令概述二、命令格式2.1.一般格式2.2.格式示例2.3.发送命令三、命令参数详解3.1. LE_Event_Mask3.2.常见事件掩码3.3.使用注意事项四、命令返回参数说明4.1.返回事件:HCI_Command_Complete4.2.返回事件参数五、命令的执行流程5.1.命令发送(主机......
  • CountdownEvent
    CountdownEvent是一种同步结构,主要用来协调多种同步处理后的结果场景使用。其含义为:定义一个多信号的结构,然后在应用时判断信号是否全部到达,如果全部到达则继续往下运行,否则进行阻塞,有意思的是,如果阻塞已过,那么再次运行到wait()时,线程是不会再次阻塞的,除非调用reset()重新初始化后......
  • ManualResetEvent&ManualResetEventSlim
    ManualResetEventManualResetEvent有三个重要的方法,分别为:waiteone(),set(),reset(),其含义如下:1.WaitOne()即等待信号发出,即可往下运行。2.set()发出信号,让线程方法继续往下运行,并允许其他线程(如有)一并往下运行。3.reset()重新初始化(即:去掉票据)变为ManualResetEvent(false)形......
  • Edge浏览器美化及使用教程
    Edge浏览器美化及使用教程右上角设置关闭不需要的界面,建议保留背景和两行快速链接.这样可以屏蔽广告信息,保持清爽.点击浏览器右上角三点,选择设置,找到外观.可以对浏览器按钮进行自定义,推荐打开开始,始终显示前进和拓展,下载.其他根据自己常用设置进行选择,单不推荐设置......
  • 浏览器访问本地资源 - 只能用于测试(把file:///映射为http://)
             ......
  • AutoResetEvent双向信号(生产者和消费者)例子
    AutoResetEvent是一个非常有用的线程同步机制,尤其是在处理生产者和消费者问题的时候,尤其适用。本随笔记录下生产者和消费者一对一问题的两种写法并进行代码执行逻辑的分析,来加深对AutoResetEvent的理解。写法一:internalclassProgram{publicstaticAutoResetEvent_pro......
  • 浏览器渲染原理,回流,重绘
    浏览器渲染原理,回流,重绘在前端开发中,理解浏览器的渲染原理、回流(Reflow)和重绘(Repaint)是至关重要的。这不仅有助于我们编写高效的代码,还能显著提升页面的性能和用户体验。本文将深入探讨浏览器渲染的核心原理,并详细解析回流和重绘的概念、触发条件以及如何优化。......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-3-启动浏览器(详细教程)
    1.简介 通过前边两篇文章跟随宏哥学习想必到这里已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动两大浏览器。按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome。但是微软已经在Win10中不维护IE浏览器了,用Edge浏览器代替或者兼容IE模式的浏览器,因此宏哥这......
  • 禁止Chrome浏览器自动更新
    转自:https://www.cnblogs.com/zsg88/p/182257551. 禁用自动更新计划任务 按下Win+R,打开运行对话框,输入taskschd.msc,打开"任务计划程序",展开左侧功能树到"任务计划程序库",分两次选择右侧两个GoogleUpdate的任务计划,右键菜单选择"禁用"。 2.禁用自动更新服务 按下Wi......
  • NGINX 的 Event Loop
    NGINX的EventLoop讲解NGINX的事件驱动架构基于EventLoop,它使得NGINX能够高效地处理大量并发连接,而不必为每个请求启动一个独立的线程或进程。通过EventLoop,NGINX采用非阻塞I/O模型,这样即使处理大量连接,也能保持较低的资源消耗。为什么NGINX使用EventLoo......