浏览器基础及缓存

目录

浏览器概述

主流浏览器:IE、Chrome、Firefox、Safari

Chrome

Firefox

IE

Safari

浏览器内核

核心职责

主流浏览器内核

JavaScript引擎

主流的JavaScript引擎

浏览器兼容性

浏览器渲染

渲染引擎的基本流程

DOM和render树构建

html解析

DOM

渲染树与DOM树的关系

布局

绘制

浏览器缓存

静态资源缓存-相关概念

静态资源缓存-影响因素

控制静态缓存

方式1:html中的缓存配置

方式2:容器缓存配置

缓存规划

LocalStorage

LocalStorageAPI

SessionStorage

比较LocalStorage和SessionStorage

Cookies


浏览器概述

浏览器是指可以显示网页服务器或者文件系统的HTML文件内容,并且让用户与这些文件交互的软件。

主流浏览器:IE、Chrome、Firefox、Safari

Chrome

Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

Firefox

Mozilla Firefox,中文俗称"火狐"(正式缩写为Fx或fx,非正式缩写为MF),是一个自由及开放源代码的网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。

IE

微软公司推出的一款网页浏览器。原称IE(6版本以前)和IE(7、8、9、10、11版本),简称IE。

Safari

Safari是苹果计算机的操作系统Mac OS中的浏览器,使用了KDE的KHTML作为浏览器的运算核心。

浏览器内核

浏览器内核(排版引擎、渲染引擎)是浏览器的核心模块,负责将网页代码转换成用户可见的页面。

核心职责

  1. 解析HTML/CSS ------构建DOM树和CSSOM树------合并成渲染树
  2. 布局------计算每个元素的位置和大小
  3. 绘制------将元素绘制到屏幕
  4. 处理JavaScript(部分内核包含独立 JS引擎)

主流浏览器内核

| 内核 | 是否开源 | 插件支持 | 应用浏览器 | 支持操作系统 |
| Trident | 否,提供接口调用 | ActiveX | IE | windows |
| Gecko | 是,多种协议授权发行,包括:MPL、GPL、LGPL | NPAPI | Firefox | windows,Mac,Linux/BSD |
| Blink | 是 | NPAPI | Chrome、Opera | windows,Mac,Linux/BSD |

Webkit 是,遵循LGPL协议 NPAPI Chrome、Safari windows,Mac,Linux/BSD

JavaScript引擎

JavaScript引擎就是用来执行JS代码的。

主流的JavaScript引擎

V8引擎是一个JavaScript引擎。JavaScript程序在V8引擎运行速度媲美二进制程序。

V8引擎支持众多操作系统,如windows、Linux、Android等。

浏览器兼容性

浏览器兼容性问题又被称为网页兼容性或网站兼容性问题,指网页在各种浏览器上显示效果可能不一致而产生浏览器和网页间兼容问题。

产生原因:

网页浏览标准只规定了接口,并没有接口实现的详细规范,是的各浏览器对相同的功能使用了不同的实现方法。

浏览器版本实现上的差异,老版本浏览器不支持新的技术。

浏览器渲染

渲染引擎的基本流程

  1. 解析生成DOM树
  2. 渲染
  3. 布局
  4. 绘制

DOM和render树构建

html解析

词法解析:将输入内容分割成大量标记的过程。可以理解为讲一段话分割成一个个的单词。

语法分析:是应用语言的语法规则的过程。

DOM

解析器的输出"解析树"是由DOM元素和属性节点构成的树结构。

DOM是HTML文档的对象表示,同时也是外部内容与HTML元素之间的接口。解析树的根节点是"Document"对象。

DOM与标记之间几乎是一一对应的关系。

渲染树与DOM树的关系

在WebKit中,解析样式和创建呈现器的过程称为"附加",每个DOM节点都有一个attach方法,附加是同步进行的,将节点插入DOM树需要调用新的节点attach方法。

处理htmlbody标记就会构建呈现树根节点。这个根节点呈现对象对应于css规范中所说的容器block,这是最上层的block,包含了其他所有block。它的尺寸就是视口,即浏览器窗口显示区域的尺寸。Firefox称之为ViewportFrame,而WebKit称之为RenderView,这就是文档所指向的呈现对象。呈现树的其余部分以DOM树节点插入的形式来构建。

布局

呈现器在创建完成并添加到呈现树时,并不包含位置和大小信息。计算这些值的过程称为布局或重排。

布局是一个递归的过程。他从根呈现器开始,然后递归遍历部分或所有的框架层次结构,为每一个需要计算的呈现器计算几何信息。

绘制

在绘制阶段,系统会遍历呈现树,并调用呈现器的paint方法,将呈现器的内容显示在屏幕上。绘制工作使用用户界面基础组件完成的。

和布局一样,绘制也分为全局和增量两种。在增量绘制中,部分呈现器发生了更改,但是不会影响整个树。

浏览器缓存

缓存:把数据或者内容,放到能够更快访问的位置。

静态资源缓存-相关概念

概念:浏览器把静态文件保留在本地的一种行为

内容:包括html、JS、css、图片等文件

作用:实现对静态资源更快的访问

静态资源缓存-影响因素

Expires:用于设置静态资源的过期时间

Last-Modified/If-Modified-Since:标示这个相应资源的最后修改时间

Etag/If-None-Match:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识

控制静态缓存

方式1:html中的缓存配置

html 复制代码
<meta http-equiv="expires" content="Mon,16  July 2025 00:00:00 GMT" />

用于这顶网页的到期时间,一但过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式。

html 复制代码
<meta http-equiv="Pragma" content="no-cache" />

用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一但离开网页就无法重新从Cache中调出。

方式2:容器缓存配置

以nginx为例进行配置,配置文件地址:nginx\conf\nginx.conf

缓存规划

|-----------|------|------|
| 资源类型 | 是否缓存 | 缓存时间 |
| html | 是 | 协商缓存 |
| 自研js | 是 | 30天 |
| 自研css | 是 | 30天 |
| 图片 | 是 | 30天 |
| 第三方js、css | 是 | 180天 |

HTML做成协商缓存,即每次都去服务端咨询是否有更新。

所有外联的JS、css都增加文件hash戳,当文件内容变化时,此文件后缀也变化,变化后的文件总是从服务端重新读取。

LocalStorage

LocalStorage时HTML5的一种本地缓存方案。主要用于储存一些体积较大的数据。

LocalStorage有大小限制,各个浏览器限制不同,子啊2-5M之间

LocalStorageAPI

  • 增加/修改:LocalStorage.setItem(key,value)
  • 获取:LocalStorage.getItem(key)
  • 删除:LocalStorage.removeItem(key)
  • 清空:LocalStorage.clear()

SessionStorage

SessionStorage是HTML5的一种本地缓存方案。

与LocalStorage相似,唯一的区别在于只对当前Session生效。

API与LocalStorage相同。

比较LocalStorageSessionStorage

|-----------------|-------|----------|-------------|----------|----------------------|
| Web Storage | 生命周期 | 作用域 | 储存大小 | 数据同步 | 适用场景 |
| LocalStorage | 永久存储 | 同源跨标签页共享 | 通常在5MB-10MB | 同源窗口实时同步 | 1.长期存储用户的偏好 2.登录状态等 |
| SessionStorage | 会话级存储 | 仅限当前标签页 | 通常在5MB-10MB | 不共享 | 1.临时储存表单数据 2.单页应用状态等 |

Cookies

Cookies式网站为了辨别用户身份或Session跟踪而储存在用户浏览器端的数据。Cookies信息一般会通过HTTP请求发送到服务器端。

一条Cookies记录主要有键、值、域、过期时间、大小组成。一般用于保存用户的网站认证信息。

Cookies的最大长度为4KB

| 属性 | 作用域 | 说明 |
| name | 必需 | Cookie 的键名(区分大小写) |
| value | 必需 | Cookie 的值(需 URL 编码) |
| expires | 可选 | 绝对过期时间 |
| Max-Age | 可选 | 相对过期时间,优先级高于expires |
| domain | 可选 | 控制 Cookie 的作用域名 |

path 可选 限制 Cookie 的路径范围
相关推荐
wordbaby4 分钟前
让数据“流动”起来:React Router Client Action 与组件的无缝协作
前端·react.js
宁静_致远9 分钟前
React 性能优化:深入理解 useMemo 、useCallback 和 memo
前端·react.js·面试
旺仔牛仔QQ糖10 分钟前
项目中TypeScript 编译器的工作流程
前端·typescript
coding丨11 分钟前
自制微信小程序popover菜单,气泡悬浮弹窗
前端·javascript·vue.js
anyup18 分钟前
10000+ 个点位轻松展示,使用 Leaflet 实现地图海量标记点聚类
前端·数据可视化·cursor
林太白20 分钟前
Rust认识安装
前端·后端·rust
掘金酱21 分钟前
🔥 稀土掘金 x Trae 夏日寻宝之旅火热进行ing:做任务赢大疆pocket3、Apple watch等丰富大礼
前端·后端·trae
1024小神22 分钟前
tauri项目添加多文件下载功能,并支持下载进度回调显示在前端页面上
前端·javascript
Ace_317508877622 分钟前
义乌购拍立淘API接入指南
前端
不想说话的麋鹿28 分钟前
《NestJS 实战:RBAC 系统管理模块开发 (四)》:用户绑定
前端·后端·全栈