Loading...
墨滴

FlowPractitioner

2021/12/12  阅读:29  主题:默认主题

week19-浏览器究竟是什么

这是查尔斯的第 51 篇文章
# 主线

在本片文章中核心回答的问题

  • 浏览器是一个什么样子的容器?
# 详述

浏览器是什么?

浏览器认知更新

  1. 浏览器的内核极其复杂,有上千万行的代码,其复杂程度媲美OS 系统;

    生活在浏览器之上的我们(前端工程师)其实对于我们所处的环境并不是那么了解,有必要对于这片广袤的大地进行一下测绘;

  2. 微软全力拥抱开源,在window10 里面内置了WSL 的LINUX 内核;

    随着微软加入chrome阵营,chrome实力大增

  3. 浏览器有上千万行代码的原因

    a. 浏览器是跨平台的, 这意味着你不能单纯调用OS API 来实现各种的功能,必须考虑跨平台的功能;

    b. Google 专门为Chrome 打造了高性能的V8 引擎,来解释和执行JS代码

    c. 浏览器中支持的复杂的库

浏览器封装出来某些API 使JS代码可以直接显卡的功能进行渲染和计算;
这个是web 端的汇编语言,我们可以同时使用其他高级语言来开发web Assembly 模块

重点关注Google Earth 在web 端的实现;
  1. 结构上说说chromium 包含的东西

    网页排版库blink 在third_party 下面, blink 的工作包括:

    • 实现web 平台的规范(例如html,标准),包括DOM,CSS,Web IDL
    • 配合V8 运行JS
    • 从底层的网络堆栈请求资源
    • 构建DOM 树
    • 计算样式和布局
    • 请求CHROME compositor,并且绘制图形

    chromium 内核 - miniblink :

    https://github.com/weolar/miniblink49

  2. 浏览器的进程和线程

  • 进程是系统内存分配的一小部分内存空间
  • 进程之间相互独立(不同进程之间可以相互通信(IPC),不过代价很大)
  • 进程由单个或多个线程组成
  • 多个线程之间是可以相互协作完成工作的
  • 同一个进程中各个线程之间共享同一块内存空间
  1. 浏览器的多进程模式

chrome浏览器使用的是多进程多线程模式,因为现在的网页复杂性非常高。如果整个浏览器是单进程的,有可能某个page界面的抛错就会导致整个浏览器的crash。

同时多个界面互相可以访问相同的内存和相同的执行环境,安全性也是一个大的问题,所以浏览器需要采用多进程模式。

  1. 浏览器主进程(Browser进程):控制chrome的地址栏,书签栏,返回和前进按钮,同时提供存储功能

  2. 第三方插件进程:每种插件一个进程,插件运行时才会创建

  3. 浏览器渲染进程(浏览器内核,内部是多线程的):负责界面渲染,脚本执行,事件处理等

  4. GPU进程:用于3D绘制

  5. 网络进程:主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里边的,最近独立为了一个进程

面向服务的架构升级

将浏览器程序的每个模块作为一项服务运行,每个服务都可以在独立的进程中运行,访问服务必须使用定义好的接口,通过IPC来通信,从而构建一个更内聚,松耦合,易于维护和扩展的系统,更好实现Chrome简单,稳定,高速,安全的目标。具体的架构表现图为

每个服务都占用一个进程,安全性的确很好,但是每个服务的开销过大,对于运行在单体计算机上的程序来说,这个应用将会筛选掉大量的低端计算机;

因此Chrome 将很多服务整合到一个进程当中去;

这篇就此停笔 现在准备收拾一下 大家周日接下来的时光过得开心吼

Cheers Charles🦁

FlowPractitioner

2021/12/12  阅读:29  主题:默认主题

作者介绍

FlowPractitioner