浏览器架构和事件循环

news2025/1/20 10:57:06

浏览器架构

  • 早期浏览器【单进程多线程】
    • Page Thread 页面渲染,负责执行js,plugin,draw
    • NetWork Thread 网络请求
    • 其余线程 file, storage
    • 缺点:只要其中一个线程崩溃,页面就会崩溃。Alt
  • 现代浏览器架构
    • 多进程的浏览器,浏览器的每一个页面都会开启一个渲染进程
    • 主进程
      • a. 浏览器界面
      • b. 用户交互
      • c. 负责管理其余子进程
    • 网络进程:负责网络资源的请求和接收
    • GPU进程
      • 驱动Chrome利用GPU的最初的动力是3D CSS,对页面渲染进行加速
    • 插件进程:第三方插件很容易导致页面崩溃或不安全问题,使用沙箱1进行封装
    • 渲染进程(内核)
      • webkit内核:sarafi/chrome
      • gecko内核:firefox/mozillasuite/seamonkey
      • presto内核:opera
      • edge内核:win10系统以上,底层是chromium内核
      • blink内核:chromium2
      • trident内核:IE9/360/搜狗/腾讯
      • 多线程的进程,运行在沙箱环境中,确保整个页面的安全,由渲染引擎和JS引擎构成,其中渲染引擎和JS引擎都是在主线程中运行。
        Alt

浏览器内核执行机制

  1. 渲染引擎和JS引擎如何相互合作?

    渲染引擎和JS解析引擎工作在同一个线程中,两者之间互斥。浏览器的事件循环为一个whie循环,它是JS异步的实现,从Event Queue任务队列中获取任务并执行。

    • DOM树【渲染引擎】,解析HTML,生成用于构建页面的信息,如果遇到script标签,停止解析
    • CSS树【渲染引擎】
    • 页面布局
    • JavaScript任务【JS引擎】
  2. JS特性
    • JS单线程执行
      • JS只能在宿主环境中通过解释器执行,运行在主线程中
      • 用途原因多个节点操作同一个节点会造成资源的浪费,引入锁\信号量机制会很复杂
      • JS单线程与渲染引擎互斥
    • 异步编程
      1. JS执行和渲染都是在主线程中执行,为了解决因主线程中JS执行时间较长导致的页面渲染卡顿问题,引入异步的机制将JS任务执行放入特定任务队列中,待所有同步任务执行结束后,异步任务的回调函数放入主线程任务队列中执行。
      2. 异步任务
        • 定时器
        • 网络请求
        • 与用户的交互
      3. 任务队列的类型
        • 宏任务队列
          • 延时队列:存放计时器线程包装的回调任务,优先级
          • 交互队列:存放用户操作事件产生后的事件处理任务,优先级
        • 微任务队列:优先级最高
  3. 主线程事件循环什么时候需要去任务队列查看?

    同步任务执行完毕,转而去任务队列获取任务,同步任务执行完毕的条件是JS的任务栈为空。


  1. 沙箱是一种技术,软件运行在操作系统受限制的环境中 ↩︎

  2. chromium是开源的,需要手动更新,隐私性更强,相比于chrome,其面向的是新功能的体验,类似于王者荣耀的体验服一样。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

几种常见的激活函数

文章目录 常见的激活函数介绍Sigmoid函数ReLU函数LeakyReLU函数Tanh函数Softmax函数总结 常见的激活函数介绍 激活函数是神经网络中的重要组成部分,它决定了神经元的输出。在神经网络的前向传播中,输入数据被传递给神经元,经过加权和和激活函…

Unity自动化打包(1)

一 安装Jenkins https://www.jenkins.io/download/ 官网 1) 使用 brew 安装 2) 安装完成后一般都会遇到问题 我用的是jenkins-lts 稳定版 解决办法 删除掉对应的文件夹 1 rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services 2…

kafka延时队列内部应用简介

kafka延时队列_悠然予夏的博客-CSDN博客 两个follower副本都已经拉取到了leader副本的最新位置,此时又向leader副本发送拉取请求,而leader副本并没有新的消息写入,那么此时leader副本该如何处理呢?可以直接返回空的拉取结…

[ 高并发]Java高并发编程系列第二篇--线程同步

并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求,而且也能怎么你在整个项目中的一个处理逻辑的能力体现.那么,你真的知道什么…

ThreadLocal 内存泄露的原因及处理方式

1、ThreadLocal 使用原理 ThreadLocal的主要用途是实现线程间变量的隔离,表面上他们使用的是同一个ThreadLocal, 但是实际上使用的值value却是自己独有的一份。用一图直接表示threadlocal 的使用方式。 从图中我们可以当线程使用threadlocal 时&#xf…

CRC校验原理及其使用

目录 何为CRC 为什么需要校验 为什么是CRC CRC的缺点 目录 何为CRC 为什么需要校验 为什么是CRC CRC的缺点 如何进行CRC校验 校验标准式是什么玩意? 常见的CRC校验 CRC校验计算过程 CRC校验代码参考 代码解读 生成CRC8校验表的代码 CRC检验网站 如何…

GEE:使用 VCT(Vegetation Change Tracker)算法森林进行时序变化检测分析

作者: _养乐多_ 本文将介绍一段 Google Earth Engine 的代码,该代码用于进行时序变化检测分析,即使用 VCT(Vegetation Change Tracker)算法对某一地区的多年影像进行分析,得出每一年的变化程度,并输出一个 VCT 矩阵,同时还可根据矩阵得到每一年的变化遥感图。可以分析…

时下热门话题:ChatGPT能否取代人类?

时下热门话题:ChatGPT能否取代人类? 2022年11月底,人工智能对话聊天机器人ChatGPT推出,迅速在社交媒体上走红,短短5天,注册用户数就超过100万。2023年1月末,ChatGPT的月活用户已突破1亿&#x…

迭代器设计模式(Iterator Design Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]

概念 迭代器设计模式(Iterator Design Pattern)是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象(如集合)的元素,而不需要暴露该对象的底层表示。迭代器模式可以帮助我们在不关心底层数据结构…

红酒分类案例中使用分箱处理

红酒分类案例中使用分箱处理 描述 在建立分类模型时,通常需要对连续特征进行离散化(Discretization)处理 ,特征离散化后,模型更加稳定,降低了过拟合风险。离散化也叫分箱(binning),是指把连续的特征值划分为离散的特…

Binder Driver 初探从驱动层角度来看

1:驱动概述 1.1基本简介 Binder 驱动是 Android 专用的,但底层的驱动架构与Linux 驱动一样。binder 驱动在以 misc 设备进行注册,作为虚拟字符设备,没有直接操作硬件,只是对设备内存的处理。主要是驱动设备的初始化(b…

如何刻录光盘文件

常识补充刻录机简介光盘刻录机是一种数据写入设备,利用激光将数据写到空光盘上从而实现数据的储存。其写入过程可以看做普通光驱读取光盘的逆过程。基本原理刻入数据时,利用高功率的激光束反射到盘片,使盘片上发生变化,模拟出二进…

计算机网络常见协议

文章目录 计算机网络TCP/IP协议TCP协议的三次握手和四次挥手TCP连接建立过程TCP连接断开过程为什么要三次握手?为什么要四次挥手? UDP协议HTTP协议 计算机网络 学习计算机网络,来记录一下。 TCP/IP协议 TCP/IP协议是Internet最基本的协议、…

报错-crontab -e 定时任务执行失败排查

使用 crontab -e 定时启动 jar 包服务失败,排查过程如下: 1、查看 crontab 服务 crontab -l陈列出了待执行任务列表,crontab 正常。 2、检查脚本 单独执行脚本没有问题,脚本内容为检查线程,杀死线程,重…

Python每日一练(20230419)

目录 1. N皇后 II 🌟🌟🌟 2. 迷宫问题(递归) 🌟🌟🌟 3. 体操比赛成绩统计 ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

分布式ID的生成方法

问题的提出 如今随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB.对数据的各种操作也是愈 加的困难,如何解决这个问题呢?此时就需要做数据库集群,为了提高查询性能将一一个数据库的数据分散 到不同的数据库中存储&am…

JVM垃圾回收与调优

文章目录 1、如何判断对象可以回收1.1、 引用计数法1.2、可达性分析法1.3、五种引用类型1.3.1 、强引用1.3.2 、软、弱引用1.3.3 、虚引用、终结器引用1.3.4、 终结器引用1.3.5 、总结 2. 垃圾清除算法2.1、标记清除2.2 、标记整理2.3、 复制 3. 分代垃圾回收3.1 、新生代、老年…

Excel技能之时间,士别三日让boss刮目相看

爱因斯坦说:“复利是世界第八大奇迹。”复利离不开时间,你也离不开时间。时间是如此重要,对每个人都是公平的。 曾经的你,看日历,数手指才能算清楚日期,不懂时间函数,太烦躁了。以下用真实的使…

哪种无线耳机音质最好?盘点2023四款好音质蓝牙耳机

随着蓝牙技术的发展,近几年人们对于蓝牙耳机的需求也在不断增加。但,蓝牙耳机自始至终都是用来听的,所以音质对于一款蓝牙耳机来说还是很重要的。下面,我来给大家推荐四款好音质蓝牙耳机,可以当个参考。 一、南卡小音舱…

沉岛思想(BFS)-朋友圈思想(并查集)

本篇博客旨在记录自已笔记,同时希望可给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉 💪。 沉岛思想: 题目: 给定一…