浏览器汇总、可信浏览器

2023-11-08

1、浏览器引擎分类:
内核 代表产品
Trident Internet Explorer,IE内核
Gecko内核 Mozilla Firefox
WebKit Safari、Chrome
Presto Opera
::-webkit-progress-bar{
     background:orange;
  }
::-webkit-progress-value{
     background:deeppink;
  }
2、浏览器组成

7部分组成

序号
1 User Interface(用户界面) 所能看到的界面部分
2 Browser engine(浏览器引擎) 在用户界面和渲染引擎之间传送指令或在客户端本地缓存中读写数据等,是浏览器中各个部分之间相互通信的核心。
3 Networking(网络) 实现HTTP、FTP等传输协议,完成网络调用或资源下载的模块;
4 Rendering Engine(或layout engineer渲染引擎) 负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。
5 JavaScript Interpreter(JS 引擎/解释器) 解析 Javascript 语言,执行 javascript 语言来实现网页的动态效果,如 V8 引擎、JavaScriptCore。
6 Date Persistence(数据持久化存储) cookie、localstorage个性设置、安全证书、缓存等;
7 UI Backend(UI 后端) 用来绘制基本的浏览器窗口内控件,如输入框、按钮、单选按钮等,根据浏览器不同绘制的视觉效果也不同,但功能都是一样的。
3、内核

浏览器内核主要分为两部分:

内核主要分为两部分
渲染引擎(layout engineer 或 Rendering Engine) 渲染引擎负责取得网页的内容进行布局计和样式渲染,然后会输出至显示器或打印机
JS引擎 JS引擎则负责解析和执行JS脚本来实现网页的动态效果和用户交互

最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

4、浏览器中的进程与线程

Chrome浏览器每打开一个网页相当于起一个进程,使用多个进程来隔离不同的网页,每个tab网页都有由其独立的渲染引擎实例。

1)非多进程:会导致一个tab网页崩溃,其他被打开的网页应用全部崩溃。

2)相对于线程共享相同的地址空间和资源,进程之间是不共享的,不会存在太多安全问题。

在内核控制下各线程相互配合以保持同步,一个浏览器通常由以下常驻线程组成:

3)GUI 渲染线程

渲染浏览器界面HTML元素,当界面重绘(Repaint)或引发回流(reflow)时,该线程就会执行;

Javascript引擎运行脚本期间,该线程挂起。

4)JavaScript引擎线程

处理页面中用户的交互,以及操作DOM树、CSS样式树,和服务器逻辑的交互。

单线程执行,GUI渲染线程与JS引擎线程互斥,因此执行时间过长,会造成页面的渲染不连贯。

5)定时触发器线程

JS引擎是单线程,所以通过单独线程来处理定时更合理,避免造成阻塞。

6)事件触发线程

当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。

可以来自如定时器、鼠标点击、AJAX异步请求等;

7)异步http请求线程

XMLHttpRequest在连接后是通过浏览器新开一个线程请求,状态变更如果有回调,则产生状态变更事件放到JS引擎的处理队列中等待处理。

6、页面渲染流程

1)渲染引擎首先通过浏览器网络层获得所请求文档的内容,开始工作,每次通常渲染不会超过8K的数据块;

2)解析html,并将标签转化,以构建DOM树;

3)构建render树::

4)布局render树:

5)绘制render树:

7、回流与重绘

在HTML中,每个元素都可以理解成一个盒子,在浏览器解析过程中,会涉及到回流与重绘:
回流:布局引擎会根据各种样式计算每个盒子在页面上的大小与位置
重绘:当计算好盒模型的位置、大小及其他属性后,浏览器根据每个盒子特性进行绘制
1)回流

  • 当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染。会从 这个 root frame 开始递归。
  • 元素的显示与隐藏、占位面积、定位方式、边距等属性的变化。

2)重绘

改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。

重排

浏览器渲染页面采用流式布局模型

DOM节点信息修改时,发生重排,重排就是根据渲染树中每个渲染对象的信息,计算出各自渲染对象的信息,如DOM元素位置、尺寸、大小。重排是一种明显的改变页面布局的操作
页面首次渲染

  • 浏览器窗口大小发生改变
  • 元素尺寸或者位置发生改变。
  • 元素内容发生变化。元素字体发生变化。
  • 添加或者删除可见的DOM元素
  • 获取特定的属性。例如offsetTOP ofsetLeft等等 scrollTop,scrollLeft
重绘

重绘改变元素页面中的展示样式,不会引起元素在文档流中位置的改变,如字体颜色、背景色、透明度、
在修改某些属性,会引起重绘

  • color、background、box-shadow、border-radius

重排一定会重绘,但重绘不一定重排

8、优化渲染性能

1)优化JS的执行效率

2)降低样式计算的范围和复杂度

3)避免大规模、复杂的布局

4)简化绘制的复杂度、减少绘制区域

5)优先使用渲染层合并属性、控制层数量

6)对用户输入事件的处理函数去抖动(移动设备)
7)将要进行复杂处理的元素处理为display属性为none
8) 使用事件委托处理程序

9、输入URL地址,浏览器经历了什么

请添加图片描述
在这里插入图片描述

浏览器进程职责:用户交互,子进程管理,文件储存等功能
网络进程职责:网络进程面向渲染进程和浏览器进程等提供网络下载功能
渲染进程职责:把网络下载的HTML,JavaScript,CSS,图片等资源解析为可以显示和交互的页面
渲染进程:谷歌给每个页面分配一个渲染进程,每打开一个页面就会配套创建一个新的渲染进程
提交文档:1、当浏览器进程接收到网络进程的响应头数据后,便向渲染进程发起提交文档的消息
        2、渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“管道”
        3、等文档数据传输完后,渲染进程返回“确认提交”的消息给浏览器进程
        4、浏览器收到"确认提交"后,更新浏览器界面状态,包括安全状态、location,前进后退,更新web界面  

步骤

1)、当发送一个 URL 请求时,不管这个 URL 是 Web 页面的 URL 还是 Web 页面上每个资源的 URL,浏览器都会开启一个线程来处理这个请求,同时在远程 DNS 服务器上启动一个 DNS查询。这能使浏览器获得请求对应的 IP 地址。

2)、浏览器首先使用http/https协议,向服务器请求页面, TCP三次握手

①TCP三次握手

浏览器->服务器,请求连接,发送同步报文

服务器->浏览器,发送同步-应答报文

浏览器->服务器,发送应答报文

②发送请求

建立TCP/IP连接后,浏览器会通过该连接向远程服务器发送HTTP的GIT请求

③接受响应

Web 服务器提供资源服务,客户端开始下载资源。

3)、请求回来的HTML代码进行页面渲染,构建成DOM树

遇见HTML页面,浏览器调用HTML解析器解析成Token并构建成dom树

遇见style/link标记,浏览器调用css解析器,处理css标记并构建cssom树

遇见script标记,调用javasctipt解析器,处理script代码,(绑定事件,修改dom/cssom树)

将dom和cssom树合并成一个渲染树

根据渲染树来计算布局,计算每个节点的几何信息(布局)

将各个节点颜色绘制到屏幕上(渲染)

注意:在实际页面中,这些步骤会被执行多次,如果dom/cssom树被修改了,会执行多次布局和渲染

4)、计算DOM树的CSS属性

5)、根据CSS属性对元素进行逐个渲染,得到内存中的位图

6)、一个可选的步骤是对位图进行合成,这会极大的增加后续绘制的速度

7)、合成之后,再绘制到界面上

8)、断开连接,TCP四次挥手

注:

位图:

​ 位图:点阵图像,像素图或栅格图像,是由像素(图片元素)的单个点组成,

这些点可以进行不同的排序和染色以构成图样,位图的单位:像素(pixel)

真实dom树生成及解析流程

浏览器渲染引擎分5步
创建DOM树,创建StyleRules、创建Render树、布局Layout(重排)、绘制Painting(重绘)

  1. HTML分析器(HTMLParser),分析HTML元素,构建一颗DOM树(标记化和树构建)。
    DOM的生成流程:字节流Bytes->分词器Token->生成节点Node->DOM
  2. CSS分析器,分析CSS文件和元素上的inline样式,生成页面的样式表
  3. 将DOM树和样式表,关联起来,构建一颗Render树(这一过程又称为Attachment(连接))。每个DOM节点都有attach方法,接受样式信息,返回一个render对象(又名renderer)。这些render对象最终会被构建成一颗Render树。
  4. 有了Render树,浏览器开始布局,为每个Render树上的节点确定一个在显示屏上出现的精确坐标。
  5. Render树和节点显示坐标都有了,就调用每个节点paint方法,把它们绘制出来。

DOM树的构建是文档加载完成开始的? 构建DOM树是一个渐进过程,为达到更好用户体验,渲染引擎会尽快将内容显示在屏幕上。它不必等到整个HTML文档解析完毕之后才开始构建render树和布局。
Render树是DOM树和CSSOM树构建完毕才开始构建的吗? 这三个过程在实际进行的时候又不是完全独立,而是会有交叉。会造成一边加载,一遍解析,一遍渲染的工作现象。
CSS的解析是从右往左逆向解析的(从DOM树的下-上解析比上一下解析效率高,冒泡),嵌套标签越多,解析越慢。

查看谷歌浏览器绘制
ctrl+shift+p:输入Performance monitor查看渲染进度
输入Frame Rate查看1s 60次刷新率

10、浏览器访问网页,第一次加载很慢,第二次刷新明显加快,简述浏览器缓存机制

http缓存
强缓存

<-cache-control:max-age=600
<-expires:Mon,14 Sep 2020 09:02:20 GMT

在这里插入图片描述

协商缓存

<-last-modified:Fri,07 Aug 2020 02:35:59 GMT
->if-modified-since:Fri,07 Aug 2020 02:35:59 GMT
<-etag:W/"5f2cbe0f-2382"
->if-none-match:W/"5f2cbe0f-2382"

cookie,session,sessionStoray,cookieStoray

注:浏览器存储,本地存储和cookie区别
特性 Cookie localStorage sessionStorage
数据 的生 命期 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 最大存4K(每条),只能存7天,存20条内容 容量最大5M,只要存储、就一直在,直到手动删除才删除,只能存储同一个域名下 容量最大5M,只存于当前会话,关闭页面,就清除存储
与服务器端通信 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 仅在客户端(即浏览器)中保存,不参与和服务器的通信
易用性 需要程序员自己封装,源生的Cookie接口不友好 源生接口可以接受,亦可再次封装来对Objec和Array有更好的支持

注:
memoryStorage:存储敏感数据
indexDB:运行在浏览器的非关系型数据库,为大型数据库提供接口

设置localStorage
localStorage相当于前端数据库,只支持string类型存储

  • setItem(增,存储数据)
  • getItem(查,读取数据)
  • removeItem(删,删除某个具体变量)
//解决刷新问题
const STORE_ROLE_KEY = 'store_currnet_role'
export function getRole(){
	const currenRole = localStorage.getItem(STORE_ROLE_KEY)
	if(currenRole && currenRole!='undefined'){
		return JSON.parse(currenRole)
	}
	return {}
}
//把role存到本地
export function storeRole(role) {
  localStorage.setItem(STORE_ROLE_KEY,JSON.stringify(role))
}
export function removeRole() {
  localStorage.removeItem(STORE_ROLE_KEY)
}
//
let obj = {name:'wl',age:18}
localStorage.setItem('name','wl')
localStorage.srtItem('info',JSON.stringify(obj))    将json转换成字符串在存入LocalStorage
let name = localStorage.getItem('name')
localStorage.removeItem('name') //删除key为name的存储
localStorage.clear()//清除所有内容
11、如何提升页面性能
  • 代码层面:避免使用css表达式,避免使用高级选择器,通配选择器。
  • 缓存利用:缓存Ajax,使用CDN,使用外部js和css文件以便缓存,添加Expires头,服务端配置Etag,减少DNS查找等
  • 请求数量:合并样式和脚本,使用css图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。
  • 请求带宽:压缩文件,开启GZIP,

代码层面优化

  • 用hash-table来优化查找
  • 少用全局变量
  • 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能
  • 用setTimeout来避免页面失去响应
  • 缓存DOM节点查找的结果
  • 避免使用CSS Expression
  • 避免全局查询
  • 避免使用with(with会创建自己的作用域,会增加作用域链长度)
  • 多个变量声明合并
  • 避免图片和iFrame等的空Src。空Src会重新加载当前页面,影响速度和效率
  • 尽量避免写在HTML标签中写Style属性

移动端性能优化

  • 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;…
  • 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存A…
  • 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
  • 当需要设置的样式很多时设置className而不是直接操作style。
  • 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
12、Telnet

Telnet是一种应用层协议,用于互联网及局域网中,使用虚拟终端形式,提供双向

字符串为主的命令行接口交互功能

属于TCP/IP协议族的一员,是互联网远程登陆的标准协议,用于服务器远程控制,可供用户

在本地主机运行远程主机的工作

13、笔记本、台式电脑尺寸及分辨率

最大电脑显示屏尺寸是32英寸,基本上是在20-24之间

1)、笔记本各个尺寸所对应的分辨率:

12.1寸 1280*800 13.3寸 1024600或1280800 14.1寸 1366*768
15.4寸 1280800或1440900 15.6寸 1600*900

2)、台式机显示器最佳分辨率:

14寸显像管(CRT)显示器分辨率: 800×600 17寸液晶或CRT显示器分辨率: 1024×768 19寸液晶显示器(屏)分辨率: 1280×1024
19寸液晶显示器(宽屏)分辨率: 1440×900 22寸液晶显示器(宽屏)分辨率: 1920×1080
14、奇安信浏览器

https://www.qianxin.com/ctp/gmbrowser.html
奇安信可信浏览器国密开发者专版

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器汇总、可信浏览器 的相关文章

随机推荐

  • 多版本node的安装与切换详细操作

    多版本node的安装与切换详细操作 安装多版本node的原因 方法一 利用nvm进行管理 NVM 简介 安装前须知 卸载已安装的nodeJS nvm 的安装与使用 node 的不同版本安装及切换 方法二 通过配置环境变量 切换node时只需
  • LeetCode刷题指南(一)

    以下是我个人做题过程中的一些体会 1 LeetCode的题库越来越大 截止到目前 已经有321个问题了 对于大多数人来说 没有时间也没有必要把所有题目都做一遍 时间充裕可以随意 刷个100题左右应该就差不多了 可以考虑序号为前100多的题目
  • js编程题总结

    lazyman 实现一个LazyMan 可以按照以下方式调用 LazyMan Hank 输出 Hi This is Hank LazyMan Hank sleep 10 eat dinner 输出 Hi This is Hank 等待10秒
  • QT常见错误及解决方法

    1 error header was not declared in this scope 在使用此变量之前没有对其进行定义 2 error RtlWerpReportException failed with status code 10
  • 树莓派体验12 - 树莓派I2C接口获取温湿度

    i2c tools工具安装 apt get install i2c tools i2c tools包含如下命令 i2cdetect i2cdump i2cget i2cset 通过raspi config打开树莓派I2C 执行i2cdete
  • 30天自制操作系统学习-第14天

    1 提高分辨率 修改asmhead nas画面模式的设定 只考虑支持QEMU模拟器的显卡 设定画面模式 MOV BX 0x4101 VBE的640x480x8bi彩色 MOV AX 0x4f02 INT 0x10 MOV BYTE VMOD
  • Windows CMD 添加自定义快捷指令

    首先在想要存放快捷指令文件的位置创建一个txt文档 我放在了c盘的user文件夹下 使用vscode打开刚刚创建的txt文件 把后缀改为 bat记住要确认改成了 bat而不是 bat txt 随便写点快捷指令 可以先拿start 浏览器来测
  • 基于SSM的商城管理系统

    1 项目介绍 基于SSM的商城管理系统6拥有管理员账号 具有商品管理 会员管理 添加视频 购物车 搜索商品等功能 2 项目技术 后端框架 SSM Spring SpringMVC Mybatis 前端技术 jsp css JavaScrip
  • ResNet解决了什么问题?

    ResNet解决的根本问题是什么 相同深度的一般前向网络的解集合和resnet的解集合是相等的 所以resnet解决的并不是模型表达能力的问题 而是模型优化问题 ResNet是如何解决优化问题的 1 更平滑的解空间的流形 从文献Visual
  • 锋利的 jQuery(一)--配置jQuery、 解决jQuery和其他库的冲突

    1 配置jQuery环境 1 获取jQuery最新版本 进入jQuery的官方网站http jquery com 如图所示的右边的GRAB THE LATEST VERSION区域 下载最新的jQuery库文件 2 jQuery库类型说明
  • 【图像处理】阈值分割

    图像阈值分割 一 简介 阈值分割常用在灰度图像中 将灰度值以一定的阈值进行分割 分为0或者255 使图像的像素值只有0或者255 非黑即白 由于不同物体的像素值不同 根据设置的阈值 将图像中的物体以像素级分割出来 有利于图像的进一步处理 使
  • for /f 用法详解

    一 for f 的基本用法 提取文本信息 则是for f的拿手好戏 读取文件内容 提取某几行字符 截取某个字符片段 对提取到的内容再切分 打乱 杂糅 只要你所能想到的花样 for f 都会想方设法帮你办到 因为 for f 就是被设计成专门
  • 【零碎知识点】- 预览图片

    原理 在图片上传之前 获取到图片本地并在Web页面进行展示以达到预览到效果 PS 生成的图片地址是临时的 下次上传相同图片 该地址会改变 伪代码 获取上传图片的本地地址 function imgHandler fileInfo File c
  • 少儿开始学编程法则

    近几年 鼓励全国实施AI教育 另一方面许多名校取消了奥数加分项 转而开设信息奥赛 格物斯坦表示 少儿编程学得好 对于未来升学工作都大有裨益 为了孩子的将来 家长们都在问少儿开始学编程的合适年龄 首先我们要了解学编程到底是学什么 和大学的计算
  • Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具 与原生 vendor 无侵入性融合 也支持从其他依赖管理工具迁移 可以很方便的实现同一个包在不同项目中不同版本 以及无相互侵入的开发和管理 vendor 特
  • 定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。

    1 定义一个圆类Circle 成员变量 半径 radius 成员方法 构造方法 get和set半径的方法 计算面积和周长的方法 定义圆柱和圆锥类 定义相应的变量成员和成员方法 使用以上类编 程 输出圆的面积和圆柱 圆锥的体积 class C
  • 02梯度下降

    参考 http biranda top Pytorch学习笔记004 梯度下降算法 随机梯度下降 补充 五折交叉验证 如下右图 在不同的训练集和测试集划分方法下 test MSE的变动是很大的 而且对应的最优degree也不一样 所以如果我
  • 链游开发 链游游戏开发

    链游就是指区块链技术上运作的手机游戏 使游戏玩家第一次变成手机游戏真正的主人 游戏玩家在游戏里面所具备的的武器装备是可以随意交易的NFT 不会受到游戏开发商的操纵 别的游戏开发商可以对于游戏玩家的NFT搭建新的游戏 假如之前的游戏软件开发得
  • MySQL中的DDL常规操作总结

    MySQL中的DDL常规操作总结 相信对于一个后端开发人员来说 SQL的DML Data Manipulation Language 操作是很熟悉的 毕竟在忙于写业务代码的同时 对数据操作最多的就是增加 Create 检索 Retrieve
  • 浏览器汇总、可信浏览器

    文章目录 1 浏览器引擎分类 2 浏览器组成 3 内核 4 浏览器中的进程与线程 6 页面渲染流程 7 回流与重绘 重排 重绘 8 优化渲染性能 9 输入URL地址 浏览器经历了什么 真实dom树生成及解析流程 10 浏览器访问网页 第一次