当前位置: 首页 > java >正文

浏览器基础及缓存

目录

浏览器概述

主流浏览器: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否,提供接口调用ActiveXIEwindows
Gecko是,多种协议授权发行,包括:MPL、GPL、LGPLNPAPIFirefoxwindows,Mac,Linux/BSD
BlinkNPAPIChrome、Operawindows,Mac,Linux/BSD
Webkit是,遵循LGPL协议NPAPIChrome、Safariwindows,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中的缓存配置

<meta http-equiv="expires" content="Mon,16  July 2025 00:00:00 GMT" />

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

<meta http-equiv="Pragma" content="no-cache" />

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

方式2:容器缓存配置

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

缓存规划

资源类型是否缓存缓存时间
html协商缓存
自研js30天
自研css30天
图片30天
第三方js、css180天

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 的路径范围
http://www.xdnf.cn/news/14406.html

相关文章:

  • 【Linux】Linux 信号驱动I/O
  • Git 配置 SSH 密钥与私钥教程(跨平台完整指南)
  • 京东API接口最新指南:店铺所有商品接口的接入与使用
  • 易语言模拟真人鼠标轨迹算法 - 非贝塞尔曲线
  • 大模型的开发应用(十一):对话风格微调项目(下):微调与部署
  • 《AI辅助编程:从零掌握核心逻辑》工作坊开业
  • mysql修改密码笔记
  • 基于51单片机的智能小车:按键调速、障碍跟踪、红外循迹与数码管显示(一个合格的单片机课设)
  • 浙江康冠锁业携智能锁具亮相2025上海国际快递物流展
  • 山东大学软件学院创新项目实训开发日志——第十七周(二)
  • 【C语言扩展识别实数负数】2022-5-29
  • Web第二次方向考核复盘
  • OpenHarmony 5.0读取文件并写入到另一份文件(公共文件夹),并保持原先的格式以及编码类型
  • 论文略读:Does Refusal Training in LLMs Generalize to the Past Tense?
  • Hierarchical Vector Quantization for Unsupervised Action Segmentation
  • 介质访问控制——随机访问控制
  • Java的DI依赖注入
  • 2025如何快速给人物模型添加骨骼
  • 【Python机器学习(一)】NumPy/Pandas手搓决策树+使用Graphviz可视化(以西瓜书数据集为例)
  • 【深度剖析】领信卓越:福耀玻璃的数字化转型(上篇2:转型动机分析)
  • 嵌入式知识篇---三种坐标系
  • 揭开肾细胞的分子密码:当 METTL3 遇上 FOSL1【AbMole】
  • Android 与 ESP-01 WIFI模块通信
  • Tomcat 配置双击启动
  • 141. 环形链表
  • 概率期望DP
  • 【茶社茶楼专用软件】佳易王茶社茶楼计时计费会员管理软件介绍
  • 深度解析企业风控API技术实践:构建全方位企业风险画像系统
  • 【运维系列】【ubuntu22.04】安装Docker
  • 【性能优化】启用zram