「WebKit 技术内幕」笔记
-
renderer生成一个虚假的渲染列表,交给外部的GPU绘制
-
同一个标签页下面的浏览历史,只与应用层有关。
-
loader 可控制资源加载优先级
document > js > images > css 可由浏览器自行控制优先级 -
预读 内核扫描页面关键字,涉及到下一页等关键字的时候提前加载下一页相关资源
-
关注下preload
-
防劫持 gz2
-
renderer
tile 将页面分成各个小块来绘制,利用多线程的好处,减少CPU的竞争 -
WebGL是通过OpenGL ES2来做底层实现
CSS3动画其实也是通过OpenGL ES2来实现 -
写数据进localStorage的步骤(跨2个进程4个线程?)
写太多次localStorage会增加很多内存 -
chrome://net-internals/
-
浏览器的进程类型
- Browser 进程 - 浏览器的主进程,负责浏览器界面的显示,各个页面的管理。
- Renderer 进程 - 网页的渲染简称,负责页面的渲染工作。可能有多个。
- NPAPI 插件进程 - 为 NPAPI 类型插件创建,插件进程是被共享的。
- GPU 进程 - 最多只有一个,当且仅当 GPU 硬件加速打开的时候才会被创建。
- Pepper 插件进程 - 为 Pepper 类型插件创建。
-
多进程模型
- Process-per-site-instance 每一个页面都创建一个独立的 Render 进程,不管这些页面是否来自同一个域,chromium 浏览器的默认行为
- Process-per-tab 每一个 tab 都创建一个独立的进程,不管是否是不同域不同实例,也是 chromium 的默认行为
- Single process 该类型含义是 chromium 不为页面创建任何独立的进程,所有渲染工作都是在 Browser 进程中进行,它们是 Browser 进程中的多个线程。该模式在 Android WebView 中被采用
-
资源加载器
- 针对每种资源类型的特定加载器 - ResourceLoader, 只加载某一种资源
- 资源缓存机制的资源加载器 - CachedResourceLoader, 所有特定加载器都共享它来查找和插入缓存资源
- 通用资源加载器 - CachedResource, 在 WebKit 需要从网络或者文件系统获取资源的时候使用, 该类只负责获得资源的数据,因此被所有特定资源加载器共享
CachedResource → ResourceLoader → WebKit 网络模块
-
资源的生命周期
- 判断资源是否在资源中
- 如果是,则发送一个 http 请求给服务器,说明该资源在本地的一些信息。服务器则根据这些信息做判断
- 如果没有更新,服务器则返回状态吗 304,表示无需更新
- 如果有更新,则申请下载最新的资源内容
-
Chromium 多进程资源加载
Renderer 进程的资源获取实际上是通过进程间通信将任务交给 Browser 进程来完成, Browser 进程有权限从网络或本地获取资源