浏览器 | 青训营笔记

90 阅读3分钟

浏览器

浏览器架构

单进程架构--多进程架构--面向服务架构

面向服务架构可以理解为多进程架构的升级版,其具有了耦合性更低,服务更聚合,拓展性高的优点。

问题

1.为什么会有单进程架构 2.面--会替代多--吗

两者都与内存等资源有关。 因为早期资源不足且昂贵,所以使用单进程节约资源,资源不断丰富,使得架构不再重视节约资源,而是追求更高的效率。目前,大多数机器上的chrome为面向服务架构,但资源跟不上的机器会运行多进程架构。基本思路是在高配设备中,每个服务独立开进程,保证稳定;在低配设备中,多个服务合并为一个进程,节约资源。同样的思路也应用到了Android上。

渲染进程 --多线程架构

1.JS引擎

一个渲染进程只有一个JS引擎,JS引擎与GUI引擎互斥,所以若js任务时间过长,页面会出现卡顿。

2.GUI渲染

当js解析几何完毕时,会自动开启。

3.定时器触发 4.网络线程 5.事件触发


tip: 正如之前所说,每一个渲染进程都会有一个JS线程,而事实是,每开一个标签页,都是开启一个独立的渲染进程。为了避免内存占用过高,会根据机器硬件来对所能开启的标签页数目作限制。

具体流程

Screen Shot 2023-04-18 at 19.47.15.png

chrome 运行原理

1.输入处理

分析用户的输入,若是URL,则直接请求相应站点;

若是query,则传给搜索引擎(chrome的搜索引擎其实也是站点)。

2.开始导航

1.用户enter后,UI线程通知网络线程发送请求,获取站带你内容。

2.请求过程中,tab处于loading状态

3.处理响应

1.网络线程收到http响应后,先分析响应头附带的媒体类型信息(MIME type); 2.若是HTML类型,交给渲染进程; 3.若是其他如zip等类型,交给下载管理器。

4.寻找渲染进程

1.当网络进程检查无误后,会告知主进程已经准备就绪

2.主进程通过IPC通知渲染进程

渲染进程告知主进程已经开始渲染,导航结束,开始文档加载阶段

5.加载资源

1.加载html文档 2.加载css,图片,javascript脚本等

6.构建渲染树

1.生成DOM(依据html文件),使得html被浏览器看懂 2.生成CSSOM树,使得css被浏览器看懂 3.两者结合,生成渲染树

7.页面布局

8.页面绘制

首屏优化

1.js代码压缩与分包

2.静态资源(比如图片)分离

3.js脚本非阻塞加载

本身渲染是从上到下的采取这种方式能有效缓解页面堵塞等情况

4.缓存策略

5.SSR

6.预置loading,骨架屏

使用vue,react等框架,加载的内容多,容易出现空白页面,使用了 loading,实际是增加一段在加载时显示的效果。vue与react都含有loading组件,可以实现不错的动画。 骨架屏就是在页面完全加载出来前,让用户大致知道页面的布局等信息。本质是用一些占位符替代还没加载出来的信息。

渲染优化

js优化

1.防止内存泄漏

特别注意全局变量; ES6可以使用辅助工具检测;

2.循环尽早break

3.合理受用闭包

4.减少访问DOM

5.防抖,节流

6.web workers