浏览器的组成部分

news2025/1/22 16:09:24

什么是浏览器?

Web 浏览器简称为浏览器,是一种用于访问互联网上信息的应用软件。浏览器的主要功能是从服务器检索 Web 资源并将其显示在 Web 浏览器窗口中。

Web 资源通常是 HTML 文档,但也可能是 PDF、图像、音频、视频或其他类型的内容。资源的位置是通过使用 URI(统一资源标识符)指定的。

浏览器包含结构良好的组件,这些组件执行一系列任务让浏览器窗口能显示 Web 资源。

本文我们就来聊一聊关于浏览器的组成部分。

下图是关于浏览器的架构图:

image-20211126131413497

一个 Web 浏览器中,主要组件有:

  • 用户界面(user interface

  • 浏览器引擎(browser engine

  • 渲染引擎(rendering engine

  • 网络(networking

  • JS 解释器(JavaScript interpreter

  • 用户界面后端(UI backend

  • 数据存储(data storage

下面我们来具体看一下每一个部分的作用。

用户界面(user interface

用户界面用于呈现浏览器窗口部件,比如地址栏、前进后退按钮、书签、顶部菜单等。

如下图所示:

image-20211126131451095

浏览器引擎(browser engine

它是 UI 和渲染引擎之间的桥梁。接收来自 UI 的输入,然后通过操纵渲染引擎将网页或者其他资源显示在浏览器中。

渲染引擎(rendering engine

负责在浏览器窗口上显示请求的内容。例如,用户请求一个 HTML 页面,则它负责解析 HTML 文档和 CSS,并将解析和格式化的内容显示在屏幕上。我们平时说的浏览器内核就是指这部分。

现代网络浏览器的渲染引擎:

  • Firefox:Gecko Software

  • Safari:WebKit

  • Chrome、Opera (15 版本之后):Blink

  • Internet Explorer:Trident

为了在屏幕上绘制像素(第一次渲染),浏览器在从网络接收数据(HTML、CSS、JavaScript)后必须经过一系列称为关键渲染路径的过程/技术。这包括 DOMCSSOM、渲染树、布局和绘画。

从数据到 DOM

来自网络层的请求内容以二进制流格式在渲染引擎中接收(通常为 8kb 块)。然后将原始字节转换为 HTML 文件的字符(基于字符编码)。

然后将字符转换为标记。词法分析器执行词法分析,将输入分解为标记。在标记化期间,文件中的每个开始和结束标记都被考虑在内。它知道如何去除不相关的字符,如空格和换行符。然后解析器进行语法分析,通过分析文档结构,应用语言语法规则来构建解析树。

解析过程是迭代的。它将向词法分析器询问新的标记,如果语言语法规则匹配,则该标记将被添加到解析树中。然后解析器将要求另一个令牌。如果没有规则匹配,解析器将在内部存储令牌并不断询问令牌,直到找到与所有内部存储的令牌匹配的规则。如果未找到规则,则解析器将引发异常。这意味着该文档无效并且包含语法错误。

这些节点在称为 DOM(文档对象模型)的树数据结构中链接,该结构建立了父子关系、相邻兄弟关系。

image-20211126131513877

CSS 数据到 CSSOM

CSS 数据的原始字节被转换成字符、标记、节点,最后在 CSSOMCSS 对象模型)中。 因为 CSS 存在层叠机制,该机制决定了将什么样式应用于元素,也就是说,元素的样式数据可以来自父项(通过继承)或设置为元素本身。因此浏览器必须递归遍历 CSS 树结构并确定特定元素的样式。

image-20211126131534063

DOMCSSOM 渲染树

DOM 树包含有关 HTML 元素关系的信息,而 CSSOM 树包含有关如何设置这些元素样式的信息。

渲染引擎会将样式信息和 HTML 元素关系信息进行汇总,用于创建另一棵树,称为“渲染树”。

渲染树包含具有视觉属性(如颜色和尺寸)的矩形。矩形按正确的顺序显示在屏幕上。

image-20211126131552411

布局

在构建渲染树之后,它会经历一个“布局”过程。布局过程的输出是一个“盒子模型”,它精确地捕获视口内每个元素的确切位置和大小:所有相对测量值都转换为屏幕上的绝对像素。

在下面的屏幕截图中,您可以看到为 body 元素计算的“框模型”(边距、边框、填充、宽度和高度)信息。

image-20211126131610965

绘制

在这一阶段渲染树会被遍历,并且会只用 UI 后端层绘制每个节点。这个过程也被称为“光栅化”。在这个阶段,渲染树中每个节点的计算布局信息被转换为屏幕上的实际像素。

绘画是一个渐进的过程,其中一些部分被解析和渲染,而该过程继续处理来自网络的项目的其余部分。

image-20211126131631548

整体流程图

渲染整体流程如下图所示:

image-20211126131710384

网络(networking

该模块处理浏览器内的各种网络通信。它使用一组通信协议,如 HTTP、HTTPs、FTP,同时通过 URL 获取请求的资源。

JS 解释器(JavaScript interpreter

JavaScript 是一种脚本语言,允许我们动态更新 Web 内容、控制由浏览器的 JS 引擎执行的多媒体和动画图像。

DOMCSSOMJS 提供了一个接口,可以改变 DOMCSSOM。由于浏览器不确定特定的 JS 会做什么,它会在遇到 script 标签后立即暂停 DOM 树的构建。

每个脚本都是一个解析拦截器,会让 DOM 树的构建停止。

JS 引擎在从服务器获取并输入 JS 解析器后立即开始解析代码。它将它们转换为机器理解的代表性对象。在抽象句法结构的树表示中存储所有解析器信息的对象称为对象语法树(AST)。这些对象被送入一个解释器,该解释器将这些对象翻译成字节码。

这些是即时 (JIT) 编译器,这意味着从服务器下载的 JavaScript 文件在客户端的计算机上实时编译。解释器和编译器是结合在一起的。解释器几乎立即执行源代码;编译器生成客户端系统直接执行的机器代码。

不同的浏览器使用不同的 JS 引擎:

  • ChromeV8 (JavaScript 引擎) (Node JS 建立在此之上)

  • MozillaSpiderMonkey (旧称“松鼠鱼”)

  • Microsoft EdgeChakra

  • SafariJavaScriptCore / Nitro WebKit

用户界面后端(UI backend

用于绘制基本的窗口小部件,比如下拉列表、文本框、按钮等,向上提供公开的接口,向下调用操作系统的用户界面。

数据存储(data storage

这是一个持久层。浏览器可能需要在本地保存各种数据,例如 cookie。浏览器还支持 localStorage、IndexedDB、WebSQLFileSystem 等存储机制。

总结

最后,我们对浏览器的组成部分进行一个总结。

浏览器由以下几个部分组成:

  1. 用户界面(user interface

    用于呈现浏览器窗口部件,比如地址栏、前进后退按钮、书签、顶部菜单等

  2. 浏览器引擎(browser engine

    用户在用户界面和渲染引擎中传递指令

  3. 渲染引擎(rendering engine

    负责解析 HTMLCSS,并将解析的内容显示到屏幕上。我们平时说的浏览器内核就是指这部分。

  4. 网络(networking

    用户网络调用,比如发送 http 请求

  5. 用户界面后端(UI backend

    用于绘制基本的窗口小部件,比如下拉列表、文本框、按钮等,向上提供公开的接口,向下调用操作系统的用户界面。

  6. JS 解释器(JavaScript interpreter

    解释执行 JS 代码。我们平时说的 JS 引擎就是指这部分。

  7. 数据存储(data storage

    用户保存数据到磁盘中。比如 cookie、localstorage 等都是使用的这部分功能。


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

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

相关文章

IDEA2022创建Web项目配置Tomcat(图文说明)

下面是在idea上面配置一个Tomcat的项目环境。 1.首先创建普通的一个Java项目,不要选择JavaEE 2.创建完成后按照下图所示,依次选择 File -> Add Framework Support -> Web Application -> 在WEB-INF文件夹下创建classes和lib文件夹 3.下面配置…

若依前后端分离版:增加新的登录接口,用于小程序或者APP获取token,并使用若依的验证方法

LoginController类 具体代码 /*** app 登录*/AnonymousAccessPostMapping("login")public AjaxResult login(RequestBody LoginBody loginBody) {AjaxResult ajax AjaxResult.success();// 生成令牌String token loginService.login(loginBody.getUsername(), logi…

【项目实战】登录与注册业务的实现(前端+后端+数据库)

本示例基于Vue.js和mint UI实现。 目录 一、数据库的创建 二、后端接口与数据库的连接 三、前端代码实现 1.注册页相关代码 2.注册页效果 3.登录页相关代码 4.登录页效果 四、注册登录演示 五、项目文件结构 一、数据库的创建 此处以Navicat软件进行创建,新…

刚去公司,发现node版本过高,如何将node版本降低?

我们可以安装nvm,node版本管理器来实现。 1、nvm是什么? nvm(node.js version management),是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过…

uniapp自动更新

一uniapp自动更新流程逻辑 实现检测版本更新并下载新版本:通过后台返回更新版本的版本号和当前版本号做比较,不同则提示有新版本需要更新,下载地址又后台返回 uniapp自动更新设计思路 在服务端配置一个最新的应用版本号; 并将打包…

【jQuery从入门到精通】

文章目录jQuery简介jQuery下载与安装下载版本说明优点安装jQuery核心DOM对象和Jquery包装集对象dom对象的获取获取一个不存在的dom对象jQuery对象的获取获取一个不存在的jQuery对象DOM对象与jQuery对象的转换dom对象转jQuery对象jQuery对象转dom对象jQuery选择器基础选择器层次…

【ES6丨前端进阶基础 】二,ES6rest参数,Symbol第七种数据类型

CSDN话题挑战赛第2期 参赛话题:面试宝典 目录​​​​​​​ 前言 一,函数参数的默认值设置 二,rest参数 三,扩展运算符 扩展运算符应用 1.合并数组 2.数组的克隆 3.伪数组转化成真正的数组 四,Symbol第7种数…

vue脚手架(2022年9月份nodejs16.17.0版本)

vue脚手架(2022年9月份nodejs16.17.0版本) 目录 vue脚手架(2022年9月份nodejs16.17.0版本) 下载地址 环境变量设置 全局文件夹与缓存文件夹设置 修改国内的【阿里】镜像 查看vue信息 更新npm 新增环境变量 安装vue与router 安装vue脚手架 Vue项目创建 项目层级 …

GitHub Copilot的下载使用方法(2022最新)

流程 1.去官网提交申请 填写邮件 2.等待几天收到邮件 3.点击邮件链接下载copilot-docs-main 4.打开vsCode,在扩展商店搜索下载github copilot 5.安装完成之后会在vsCode右下角提示登录github以及允许copilot 6.如果你有资格那么vsCode右下角就会出现copilot的…

Window.location用法

Window.location 详细介绍 本文翻译自 samanthaming 发表于 dev.to 的博文 原文地址 window.location Cheatsheet - DEV Community 👩‍💻👨‍💻 如果你需要获取网站的 URL 信息,那么 window.location 对象就是为你准备…

【vue2可视化开发】新手会遇到的问题——大屏自适应

简要描述 开发可视化大屏第一步,必须要考虑适配不同屏幕的问题,在网络上查看资料,总结了一个目前最适合可视化开发的自适应方案——v-scale-screen组件 1. 安装 注:vue2使用v-scale-screen1.0.0版本,vue3使用v-scal…

Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容

文章目录本系列目录前言一、QCombobox的组成二、MultiSelectComboBox实现1. 总体实现2. QLineEdit部分3. QListWidget部分1. 搜索框部分2. 选项部分4. 对外接口定义5. 代码实现总结本系列目录 Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选&a…

vue3中使用ref语法糖

自从引入组合式 API 的概念以来,一个主要的未解决的问题就是 ref 和响应式对象到底用哪个。响应式对象存在解构丢失响应性的问题,而 ref 需要到处使用 .value 则感觉很繁琐,并且在没有类型系统的帮助时很容易漏掉 .value 以上是官方原话,大概…

webrtc streamer前端页面js播放摄像头rtsp流

webrtc streamer 大致的了解了一下,就是使用js来播放rtsp视频流的一个技术。目前实现的厂家有很多,但是要收费。我这里是找了一个开源免费的项目,使用起来有一定的局限性,需要根据自己的业务自己去实现逻辑,目前我只做…

盘点那些神级uniapp插件,总有一款让你事半功倍

自从有了uniapp,各位做小程序,app是不是感觉快起飞了,如果你想快速推出自己的移动端(各平台小程序,安卓、苹果),那么uniapp还是很不错的,至少时间和研发成本可以帮你降低很多很多。 …

VUE+BPMN.JS右侧属性栏自定义功能

博主最近项目需求要实现BPMNVUE实现流程自定义, 在完成基础功能后,要求右侧属性栏内的一些属性需要根据后端返回内容进行动态渲染, 这时候,用原来的属性栏明显就不满足需求,我找到的大部分博客包括官方都是建议你根据项目需求来全部重写一个属性栏.但是项目时间紧的情况下这种…

React基础-JSX的本质-虚拟DOM的创建过程

文章目录JSX的本质虚拟DOM的创建过程JSX的本质 实际上,jsx仅仅只是 React.createElement(component, props, ...children) 这个函数的语法糖。 所有的jsx最终都会被转换成React.createElement的函数调用。 createElement需要传递三个参数: 参数一:type 当前元素的…

Error in render: “TypeError: Cannot read properties of undefined (reading ‘length‘)“,深层次数据处理报错????

vue中出现很烦人的红色报错,例如,如下图: 1. 2. Error in render: “TypeError: Cannot read properties of undefined (reading ‘name‘)“ 一般这样的length读取出现的报错,往往很令人苦恼,vue虽然正常渲染&#x…

炫酷登录注册 完整功能版【本地存储+JS+HTML+CSS+jQuery】

一:源码获取 🔍说明: 这篇文章是完整功能的登录注册,包含了基于本地存储的注册,登录,以及密码修改功能,登录包含错误三次冻结账户1000s等细微功能,适合新入门前端的小伙伴拿来学习使…

前端页面显示的时间格式为:2022-03-18T01:46:08.000+00:00 如何转换为:年-月-日 时:分:秒 ?

解决办法: 第一种办法:后端格式处理,在后端转数据格式为字符串类型 第二种办法:前端格式处理, ElementUI 中 Table-column Attributes 列属性中有一个 formatter参数 ,用来格式化内容 , 里面可…