「WebKit 技术内幕」笔记

  1. renderer生成一个虚假的渲染列表,交给外部的GPU绘制

  2. 同一个标签页下面的浏览历史,只与应用层有关。

  3. loader 可控制资源加载优先级
    document > js > images > css 可由浏览器自行控制优先级

  4. 预读 内核扫描页面关键字,涉及到下一页等关键字的时候提前加载下一页相关资源

  5. 关注下preload

  6. 防劫持 gz2

  7. renderer
    tile 将页面分成各个小块来绘制,利用多线程的好处,减少CPU的竞争

  8. WebGL是通过OpenGL ES2来做底层实现
    CSS3动画其实也是通过OpenGL ES2来实现

  9. 写数据进localStorage的步骤(跨2个进程4个线程?)
    写太多次localStorage会增加很多内存

  10. chrome://net-internals/

  11. 浏览器的进程类型

    • Browser 进程 - 浏览器的主进程,负责浏览器界面的显示,各个页面的管理。
    • Renderer 进程 - 网页的渲染简称,负责页面的渲染工作。可能有多个。
    • NPAPI 插件进程 - 为 NPAPI 类型插件创建,插件进程是被共享的。
    • GPU 进程 - 最多只有一个,当且仅当 GPU 硬件加速打开的时候才会被创建。
    • Pepper 插件进程 - 为 Pepper 类型插件创建。
  12. 多进程模型

    • Process-per-site-instance 每一个页面都创建一个独立的 Render 进程,不管这些页面是否来自同一个域,chromium 浏览器的默认行为
    • Process-per-tab 每一个 tab 都创建一个独立的进程,不管是否是不同域不同实例,也是 chromium 的默认行为
    • Single process 该类型含义是 chromium 不为页面创建任何独立的进程,所有渲染工作都是在 Browser 进程中进行,它们是 Browser 进程中的多个线程。该模式在 Android WebView 中被采用
  13. 资源加载器

    • 针对每种资源类型的特定加载器 - ResourceLoader, 只加载某一种资源
    • 资源缓存机制的资源加载器 - CachedResourceLoader, 所有特定加载器都共享它来查找和插入缓存资源
    • 通用资源加载器 - CachedResource, 在 WebKit 需要从网络或者文件系统获取资源的时候使用, 该类只负责获得资源的数据,因此被所有特定资源加载器共享

    CachedResource → ResourceLoader → WebKit 网络模块

  14. 资源的生命周期

    • 判断资源是否在资源中
    • 如果是,则发送一个 http 请求给服务器,说明该资源在本地的一些信息。服务器则根据这些信息做判断
    • 如果没有更新,服务器则返回状态吗 304,表示无需更新
    • 如果有更新,则申请下载最新的资源内容
  15. Chromium 多进程资源加载
    Renderer 进程的资源获取实际上是通过进程间通信将任务交给 Browser 进程来完成, Browser 进程有权限从网络或本地获取资源

posted @ 2017-02-07 14:55  EX天亮以后  阅读(302)  评论(0编辑  收藏  举报