浏览器的工作原理

88 阅读4分钟

浏览器的发展历史对前端工程师影响深远,了解浏览器内核有助于写出更好的代码和提供更好的用户体验。浏览器结构包括用户界面、浏览器引擎和渲染引擎。

进程和线程

进程和线程是计算机操作系统中的基本概念,进程是程序的基本执行实体,而线程是操作系统能够进行运算的最小单位。多进程浏览器结构可以提高安全性和稳定性。

进程(Process)

进程是计算机中正在运行的程序的实例,一个进程就是一个程序运行实例。它拥有独立的内存空间、代码和数据,并且由操作系统负责调度和管理。每个进程在执行时都会分配独立的内存空间,不同进程之间的内存是隔离的,一个进程的错误不会直接影响其他进程。 进程之间通过进程间通信(IPC)机制来交换数据和进行通信,常见的IPC方式包括管道、消息队列、共享内存等。进程的切换开销较大,因为需要保存和恢复进程的完整状态,涉及到内存保护和虚拟内存的切换。

线程(Thread)

线程是进程的子任务,一个进程可以包含多个线程。它们共享相同的代码和数据,但拥有独立的执行栈和寄存器集合。多个线程可以在同一进程内并发执行,共享进程的资源,如内存空间、打开的文件等。线程间的通信和数据交换比进程间的通信更加方便,因为它们共享相同的地址空间。线程的切换开销较小,因为线程共享进程的地址空间,切换时不需要切换内存页表,速度较快。

区别

  • 进程和线程都可以实现并发执行,但进程是独立的执行实体,而线程是依赖于进程的
  • 进程之间资源相互隔离,线程共享所属进程的资源
  • 创建和销毁线程的开销较小,而创建和销毁进程的开销较大。
  • 多线程程序的编程复杂度通常比单线程程序高,但多线程可以更好地利用多核处理器来提高程序的执行效率。

浏览器是个多进程结构

  1. 浏览器进程:控制除标签页外的用户界面,包括地址,书签,后退,前进按钮等,以及负责与浏览器其他进程负责协调工作
  2. 缓存进程
  3. 网络进程 发起网络请求
  4. 渲染器进程 渲染Tab 有可能会为每个标签页是一个渲染进程
  5. GPU进程 渲染
  6. 插件进程 内置插件

下面说下渲染进程的过程

  1. 浏览器通过网络请求后获取html数据,通过ICP传给渲染器进程
  2. DOM - 主线程将html解析构造DOM树
  3. style - 样式计算
  4. layoutTree - dom+style 根据dom树和样式生成layoutTree
  5. paint -绘制 通过遍历 Layout Tree生成绘制顺序表
  6. laryer - 布局 然后根据主进程将layoutTree 和绘制信息表传给合成器线程
  7. 合成器线程 - 将得到的信息分图层分成更小的图块
  8. 栅格线程 - 将更小的图块进行栅格化raster,返还给合成器线程draw quads图块信息 存储在GPU中
  9. frame 合成器将栅格线程返回的图块合成帧交给浏览器进程
  10. 浏览器进程 收到一帧的图像后传给GPU进行渲染

重排:当改变dom的属性时,会重新进行样式计算,会重新布局和绘制
重绘: 当改变颜色时,只会发生样式计算和绘制(layer)
requestAnimationFrame()
会将主线程的任务分散到每一帧的间隔,从而不影响动画的流程
Fiber react利用浏览器的空闲时间做优化
Transform 会直接运行合成器线程,所以不会感染主线程的渲染
在移动端使用3d转换可以优化性能(如果设备有3d加速引擎 GPU 可以提高性能 , 2d转换是无法调用GPU,2G是靠的CPU)

总结

网络线程通过safe process检查站点是否安全,safe browsing系统判断站点安全性。渲染器进程负责渲染页面,layout生成节点坐标,绘制记录表确定绘制顺序,栅格化将信息转化为像素点显示。

合成技术是页面分层栅格化合成的过程,重排重绘占用主线程,可通过requestAnimationFrame和transform属性优化性能。