计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

38|浏览器原理(二):浏览器进程通信与网络渲染详解

你好,我是 LMOS。
通过前面的学习,你应该对浏览器内的进程和线程已经有了一个大概的印象,也知道了为了避免一些问题,现代浏览器采用了多进程架构。
这节课,我们首先要说的是 Chrome 中的进程通信。这么多的进程,它们之间是如何进行 IPC 通信的呢?要知道,如果 IPC 通信设计得不合理,就会引发非常多的问题。

Chrome 如何进行进程间的通信

上节课我们提了一下 Chrome 进程架构,Chrome 有很多类型的进程。这些进程之间需要进行数据交换,其中有一个浏览器主进程,每个页面会使用一个渲染进程,每个插件会使用一个插件进程。除此之外,还有网络进程和 GPU 进程等功能性进程。
进程之间需要进程通信,渲染进程和插件进程需要同网络和 GPU 等进程通信,借助操作系统的功能来完成部分功能。其次,同一类进程(如多个渲染进程)之间不可以直接通信,需要依赖主进程进行调度中转。
进程与进程之间的通信,也离不开操作系统的支持。在前面讲 IPC 的时候,我们了解过多种实现方式。这里我们来看看 Chrome 的源码,Chrome 中 IPC 的具体实现是通过 IPC::Channel 这个类实现的,具体在 ipc/ipc_channel.cc 这个文件中封装了实现的细节。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Chrome浏览器采用多进程架构,利用Mojo和legacy IPC进行进程间通信,确保了不同进程之间的有效通信,为浏览器的网络渲染提供了基础支持。在网络渲染过程中,浏览器接收用户输入的URL后,通过网络进程获取资源并进入渲染流程。渲染过程包括建立数据传输管道、构建DOM树、布局阶段、绘制和合成渲染。Chromium项目的文件结构包括多个子目录,涵盖了Chrome浏览器的各个功能模块。文章深入介绍了Chrome浏览器的多进程协作方式、网络渲染过程和Chromium项目的目录结构,为读者提供了全面的技术概览。文章还提供了一些参考资料,包括Chromium官方设计思维和源码、Chrome开发者的渲染页面工作流程介绍、Mojo的简单使用以及实现,以及介绍了WebKit的渲染引擎和JavaScript引擎的工作原理的书籍。同时,文章提出了思考题,探讨了JS代码阻塞页面渲染的原因,以及从浏览器设计和前端应用开发的角度进行优化的方法。整体而言,本文为读者提供了深入了解Chrome浏览器技术特点和相关优化方法的重要参考资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • LockedX
    浏览器无法知道JS代码会对DOM和CSSDOM操作什么,所以要等JS执行完再渲染页面。尽量把<script/>放在HTML最后执行,对用户来说可能体验好一点。

    作者回复: 好的

    2022-10-28归属地:湖北
    1
  • peter
    请教老师几个问题: Q1:一个网络还是多个网络? 文中“这些由 Mojo 组成的、可以互相通信的进程就形成了一个网络。在这个网络内,任意两个进程都可以进行通信,并且每个进程只能处于一个 Mojo 网络中”,这句话的前面部分是说是一个网络。 但后面说“每个进程处于一个网络”,给人感觉就是多个进程就会处于多个网络中。 Q2:多个“mojo system + mojo binding”是什么意思? 第一个图中,画了两个mojo system API + mojo binding API”,为什么画多个,有什么含义? Q3:mach port是什么通信方式? Q4:chrome中进程间通信没有采用消息队列,是吗?

    作者回复: 一个网络

    2022-10-28归属地:湖北
  • 苏流郁宓
    由于cpu(单核),始终实时只能指向一个栈的入口(可以切换不同的栈) 对于浏览器来说,由于网络重要数据存放在内存条上。需要通过链表的形式来引导cpu在不同栈中切换!也就是说链表存放的内存所在位置会被反复的引用(cpu访问) 那么浏览器可以优化的部分,就是可以制定一个统一的接口标准,方便不同网页的插件进行应用。从而更好的通过数据分流,既流畅也用得舒服的 啊

    作者回复: 嗯嗯

    2022-10-28归属地:湖北
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部