前期了解
- 了解浏览器原理的原因: 设计高性能的Web应用,优化现有的Web应用。
- 选取Chrome浏览器的原因: Chrome浏览器是基于Chromium二次开发而来,并且是目前世界上使用率最高的浏览器。
- 浏览器中包括: 网络进程,页面渲染过程,JavaScript执行流程,Web安全等。
- Chrome任务管理器。
并行处理与串行处理
- 并行处理:同一时刻同时执行多个任务。
- 串行处理:一个任务接着一个任务执行。
线程与进程
- 线程是不能单独存在的,必须由进程来启动和管理。
- 进程:一个应用程序的运行实例就是进程,也就是操作系统开辟的一块内存,这个环境就是进程。
- 进程包括:代码,运行中的数据,执行任务的主线程
- 进行与线程关系的特点:
- 进程中任一线程出错,这个进程就崩溃,其他线程的执行结果也么得了。
- 线程之间可以共享包含他们的进程中的数据。
- 当一个进程结束后,操作系统会回收进程所占用的内存(线程造成的内存泄漏,也会被回收)。
- 进程之间的内容相互隔离,互不干扰。 如果想让不同的进程之间通信,需要使用IPC机制。
单进程浏览器(一个进程,多个线程)
- 单进程浏览器指浏览器的所有功能都运行在同一个进程中。
- 缺点
- 不稳定:插件会导致浏览器崩溃;JS代码会影响渲染引擎模块,从而影响浏览器
- 不流畅:页面线程的内容过多,同一时刻只能执行一个模板,内存泄漏也会造成内存的占用率过高,浏览器变得越来越慢。
- 不安全:插件采用C/C++编写,可以获取到操作系统的任一资源;页面脚本也可以通过浏览器的漏洞获取权限。
早期的多进程架构浏览器
- 解决不稳定的问题:多个进程,相互之间互不影响。
- 解决不流畅的问题:对于内存泄漏:关闭页面,内存回收;JS只影响当前页面,其他脚本运行在自己的渲染进程中。
- 解决不安全的问题:安全沙箱
目前的多进程架构浏览器
- 一个页面,浏览器任务管理器中,至少是个进程:渲染进程,网络进程,浏览器主进程,GPU进程(实际可能往往多余这些)
- 浏览器进程:主要负责页面显示,用户交互,子进程管理,存储功能。
- 渲染进程:将HTML,CSS,JS转换为用户可以与之交互的网页,运行在沙箱之下吗,排版引擎和Blnk和JS引擎V8都运行在这个进程中。
- GPU进程:实现3D CSS效果,Chrome的UI界面都采用GPU。
- 网络进程:负责页面的网络资源加载。
- 插件进程:负责插件的运行。
- 缺点: 1.更高的资源占用
- 更复杂的体系架构
未来的Chrome架构
主要采用面向服务的架构(SOA)的思想来设计Chrome架构。 原来的各种模块会被重构独立的服务,每个服务都可以在独立的进程中运行,访问服务必须使用定义好的接口,通过IPC来通信,从而构建一个更内聚,松耦合,易于维护和扩展的系统。
补充:
- 如果几个页面符合同一站点,将会被分配到一个渲染进程中。
- 如果页面中有Iframe,将会运行在独立的进程中。
- 网络进程,浏览器主进程,渲染进程,GPU进程是必须的,但还有很多进程比如:扩展进程,iframe进程,压缩图片进程等。