iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >浏览器的事件循环
  • 433
分享到

浏览器的事件循环

服务器运维 2023-09-09 07:09:29 433人浏览 泡泡鱼
摘要

其实在我们电脑的操作系统中,每一个运行的程序都会由自己的进程(可能是一个,也可能有多个),浏览器就是一个程序,它的运行在操作系统中,拥有一组自己的进程(主进程,渲染进程,网络进程,GPU进程....) 浏览器:各个进程之间是相互独立的(这样

其实在我们电脑的操作系统中,每一个运行的程序都会由自己的进程(可能是一个,也可能有多个),浏览器就是一个程序,它的运行在操作系统中,拥有一组自己的进程(主进程,渲染进程,网络进程,GPU进程....)

浏览器:各个进程之间是相互独立的(这样不会因为一个进程的问题导致其他的进程奔溃不能使用),而进程之间又是需要相互协作的。

01:主进程

管理整个的浏览器窗口(用户界面,地址栏,书签栏等等),他还负责创建和销毁渲染进程,并通过进程之间的IPC通信与渲染进程通信(管理浏览器的各个组件)

02:渲染进程
也成为页面进程,每个独立的页面都有自己的独立渲染进程(渲染引擎),进行负责解析htmlCSS,js,然后渲染到我们看到的视觉

★ 计时器和任务队列就是在该进程中(该进程需要和主进程之间IPC相互通讯,告诉主进程需要执行那些任务)

03:网络进程
负责处理网络请求,同时产生的跨域问题也是在网络进程中被拦截的,一般浏览器中页面之间是共享一个网络进程的

04:GPU进程
负责处理与图形相关的操作,例如绘制网页内容、执行动画和视频解码。这可以减轻主进程和渲染进程的工作负担,提高了性能。一般浏览器中页面之间是也是共享一个GPU进程

05:插件进程+其他进程

总结:现代浏览器通常有一个主进程(浏览器进程)、多个渲染进程(用于运行页面,每个页面一个渲染进程)、一个共享的网络进程(处理网络请求),以及一个共享的GPU进程(处理图形渲染)。其他进程(如插件进程等)也可能存在。

执行调度优先级?(一个进程下有多个子线程)

由于渲染主线程主要分则解析js,css,html,布局,图层处理,计时器等等操作,非常繁忙!

这里就有一个调度问题?(以前端角度)

01: js执行一半的时候,用户有了交互,怎么处理?

02:js执行一半的时候,有个定时器时间到了,怎么处理?

03:js执行一半的时候,请求回来了,怎么处理?

04:......

过程: 渲染主线程开始时循环状态,每次都去任务队列查看是否有任务,有任务的话就进入主线程,没有进入休眠状态。
同时其他的线程的任务可以随时插入任务队列中(任务队列尾部);

有些操作(网络请求,绑定事件, 定时器。。。)无法立即执行的操作,不能让其一致占有主线程,导致其他的任务不能执行。于是渲染主线程分成了:同步任务和异步任务。

当渲染主线程发生计时任务,网络任务,事件监听时,会将任务交给对应的其他线程处理,并结束当前的该任务,继续后面的任务执行。

其他线程完成时,将对应的回调函数包装成任务加入消息队列尾部,等待执行

如图:渲染主线程执行同步任务,发现该任务是计时器任务,于是将该任务交给了对应的线程模块处理该任务,然后继续任务队列中的其他任务,然后计时线程结束后产生的任务,排列到任务对列尾部

任务队列: 消息队列组成(消息队列先进先出)

   微队列:   优先级   最高     promise MutationObserver

交互队列:   优先级    高        点击

延迟队列:   优先级   中         计时器
 

目前浏览器我们用到的(事件循环从最高 高 中 以此执行读取)

在执行过程中,一定是先把最高队列的完毕在一次后面的队列

          function addDelay() {            console.log('延迟1');            setTimeout(() => {                console.log('延迟2');            }, 100);            delay(2000);        };        function addInteraction() {            console.log('交互1');            insectDOM.onclick = () => {                console.log('交互2');            };            delay(2000);        };        startDOM.onclick = function () {            addDelay();            addInteraction();            console.log("============");        };         // 延迟1 交互1 ============ 交互2 延迟2        // console.log('主线程: start')        // setTimeout(() => {        //     console.log('===== 宏任务 => set1=====')        // })        // new Promise(function(onfull, onject) {        //     onfull(1)        //     setTimeout(() => {        //         console.log('===== 宏任务 => set2=====')        //     })        // }).then(res => {        //     console.log('+++++ 微任务 => Pro1 +++++')        // })        // // 异步: 宏任务 => 微任务        // setTimeout(() => {        //     console.log('===== 宏任务 => set3=====')        //     new Promise(onfull => {        //         onfull(1)        //     }).then(res => {        //         console.log('------------宏任务 => set3 : 嵌套 + 微任务-------------')        //     })        // })        // // 异步: 微任务  => 宏任务        // new Promise(function(onfull, onject) {        //     onfull(1)        // }).then(res => {        //     setTimeout(() => {        //         console.log('------------微任务 => Pro2 : 嵌套 + 宏任务-------------')        //     })        // })        // console.log('主线程: end')

 

来源地址:https://blog.csdn.net/qq_25919495/article/details/132487565

--结束END--

本文标题: 浏览器的事件循环

本文链接: https://www.lsjlt.com/news/401060.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 浏览器的事件循环
    其实在我们电脑的操作系统中,每一个运行的程序都会由自己的进程(可能是一个,也可能有多个),浏览器就是一个程序,它的运行在操作系统中,拥有一组自己的进程(主进程,渲染进程,网络进程,GPU进程....) 浏览器:各个进程之间是相互独立的(这样...
    99+
    2023-09-09
    服务器 运维
  • 怎么理解浏览器事件循环
    本篇内容介绍了“怎么理解浏览器事件循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么要有事件循环JS...
    99+
    2024-04-02
  • 浏览器事件循环与vue nextTicket怎么实现
    小编给大家分享一下浏览器事件循环与vue nextTicket怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!同步:就是在...
    99+
    2024-04-02
  • JS中浏览器事件循环机制的示例分析
    这篇文章将为大家详细讲解有关JS中浏览器事件循环机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先来明白些概念性内容。进程、线程进程是系统分配的独立资源,是 ...
    99+
    2024-04-02
  • javascript关闭浏览器事件的方法
    小编给大家分享一下javascript关闭浏览器事件的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript关闭浏览器事件的方法:1、使用onbe...
    99+
    2023-06-14
  • Node.js 事件循环中的事件循环模型与架构设计
    ...
    99+
    2024-04-02
  • 详解JS浏览器事件模型
    目录什么是事件一个简单的例子如何绑定事件框架中的事件事件对象事件传播事件代理总结什么是事件 我想你很可能听说过事件驱动, 但是事件驱动到底是什么?为什么说浏览器是事件驱动的呢? 事件...
    99+
    2024-04-02
  • JavaScript浏览器事件的原理是什么
    JavaScript浏览器事件的原理是什么 ,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript 程序采用了异步事件驱动编程(E...
    99+
    2024-04-02
  • 详解JavaScript事件循环
    目录一、事件循环的执行过程二、事件循环进阶用法三、JavaScript任务类型3.1 同步任务&异步任务3.2 宏任务&微任务JavaScript事件循环是一种机制,...
    99+
    2023-05-16
    JavaScript事件循环 JavaScript循环
  • 关闭浏览器时提示onbeforeunload事件
    当用户关闭浏览器时,可以使用`onbeforeunload`事件来提示用户确认是否要关闭页面,可以显示一个提示消息,让用户选择是继续...
    99+
    2023-08-11
    onbeforeunload
  • node事件循环中事件执行的顺序
    目录事件循环浏览器环境事件循环node环境事件循环六个阶段(1) setTimeout 和 setImmediate(2) process.nextTick练习例子总结:事件循环 在...
    99+
    2024-04-02
  • Node.js中事件循环的方法
    本文小编为大家详细介绍“Node.js中事件循环的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中事件循环的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Node 自身的执行模型——事件循...
    99+
    2023-06-17
  • Node的事件循环是什么
    这篇文章主要介绍“Node的事件循环是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node的事件循环是什么”文章能帮助大家解决问题。一、什么是事件循环一句话:事件循环是Nodejs处理异步操作...
    99+
    2023-07-05
  • Node.js 事件循环中事件的处理流程
    ...
    99+
    2024-04-02
  • JavaScript中的事件循环方式
    目录概述原理同步>微任务>宏任务案例解析能否先将promise.then分发到微任务中js是单线程,非阻塞,试想如果是多线程,一个线程在某个DOM节点上添加内容,另一个线...
    99+
    2024-04-02
  • JS浏览器事件模型的示例分析
    小编给大家分享一下JS浏览器事件模型的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript的特点1.JavaScript主要用来向HTML页...
    99+
    2023-06-15
  • BOM 事件处理:响应浏览器的变化
    介绍 BOM(Browser Object Model)事件处理是 JavaScript 中用于响应浏览器窗口大小变化、鼠标点击事件、键盘事件、滚动条事件和文件加载事件的一系列方法和属性。通过使用 BOM 事件处理,你可以轻松地实现更好的...
    99+
    2024-02-21
    JavaScript BOM 事件处理 浏览器变化 窗口大小变化 鼠标点击 键盘事件 滚动条事件 文件加载事件
  • js如何禁止浏览器的回退事件
    小编给大家分享一下js如何禁止浏览器的回退事件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!查找了好多资料才找到的,这种方式,可...
    99+
    2024-04-02
  • 浏览器可以注册的事件有哪些
    这篇文章主要为大家展示了“浏览器可以注册的事件有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“浏览器可以注册的事件有哪些”这篇文章吧。Html事件列表 一般事件: onClick HTML:...
    99+
    2023-06-08
  • JavaScript中事件循环总结
    这篇文章主要讲解了“JavaScript中事件循环总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中事件循环总结”吧!js中的事件循环因为JavaScript是单线程的...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作