浏览器工作原理与实践
李兵
前盛大创新院高级研究员
立即订阅
6167 人已学习
课程目录
已完结 42 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 参透了浏览器的工作原理,你就能解决80%的前端难题
免费
宏观视角下的浏览器 (6讲)
01 | Chrome架构:仅仅打开了1个页面,为什么有4个进程?
02 | TCP协议:如何保证页面文件能被完整送达浏览器?
03 | HTTP请求流程:为什么很多站点第二次打开速度会很快?
04 | 导航流程:从输入URL到页面展示,这中间发生了什么?
05 | 渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?
06 | 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
浏览器中的JavaScript执行机制 (5讲)
07 | 变量提升:JavaScript代码是按顺序执行的吗?
08 | 调用栈:为什么JavaScript代码会出现栈溢出?
09 | 块级作用域:var缺陷以及为什么要引入let和const?
10 | 作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?
11 | this:从JavaScript执行上下文的视角讲清楚this
V8工作原理 (3讲)
12 | 栈空间和堆空间:数据是如何存储的?
13 | 垃圾回收:垃圾数据是如何自动回收的?
14 | 编译器和解释器:V8是如何执行一段JavaScript代码的?
浏览器中的页面循环系统 (6讲)
15 | 消息队列和事件循环:页面是怎么“活”起来的?
16 | WebAPI:setTimeout是如何实现的?
17 | WebAPI:XMLHttpRequest是怎么实现的?
18 | 宏任务和微任务:不是所有任务都是一个待遇
19 | Promise:使用Promise,告别回调函数
20 | async/await:使用同步的方式去写异步代码
浏览器中的页面 (8讲)
21 | Chrome开发者工具:利用网络面板做性能分析
22 | DOM树:JavaScript是如何影响DOM树构建的?
23 | 渲染流水线:CSS如何影响首次加载时的白屏时间?
24 | 分层和合成机制:为什么CSS动画比JavaScript高效?
25 | 页面性能:如何系统地优化页面?
26 | 虚拟DOM:虚拟DOM和实际的DOM有何不同?
27 | 渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题?
28 | WebComponent:像搭积木一样构建Web应用
浏览器中的网络 (3讲)
29 | HTTP/1:HTTP性能优化
30|HTTP/2:如何提升网络速度?
31|HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络
浏览器安全 (5讲)
32 | 同源策略:为什么XMLHttpRequest不能跨域请求资源?
33 | 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
34 | CSRF攻击:陌生链接不要随便点
35 | 安全沙箱:页面和系统之间的隔离墙
36 | HTTPS:让数据传输更安全
结束语 (1讲)
结束语 | 大道至简
课外加餐 (4讲)
加餐一|浏览上下文组:如何计算Chrome中渲染进程的个数?
加餐二|任务调度:有了setTimeOut,为什么还要使用rAF?
加餐三|加载阶段性能:使用Audits来优化Web性能
加餐四|页面性能工具:如何使用Performance?
浏览器工作原理与实践
登录|注册

加餐一|浏览上下文组:如何计算Chrome中渲染进程的个数?

李兵 2019-11-15
你好,我是李兵。
在留言区,经常有朋友问到如何计算 Chrome 中渲染进程个数的问题,那么今天我就来完整地解答这个问题。
在前面“04 | 导航流程”这一讲中我们介绍过了,在默认情况下,如果打开一个标签页,那么浏览器会默认为其创建一个渲染进程。不过我们在“04 | 导航流程”中还介绍了同一站点的概念,如果从一个标签页中打开了另一个新标签页,当新标签页和当前标签页属于同一站点的话,那么新标签页会复用当前标签页的渲染进程。
具体地讲,如果我从极客邦 (www.geekbang.org) 的标签页中打开新的极客时间 (time.geekbang.org) 标签页,由于这两个标签页属于同一站点 (相同协议、相同根域名),所以他们会共用同一个渲染进程。你可以看下面这张 Chrome 的任务管理器截图:
多个标签页运行在同一个渲染进程
观察上图,我们可以看到,极客邦官网和极客时间标签页都共用同一个渲染进程,该进程 ID 是 84748。
不过如果我们分别打开这两个标签页,比如先打开极客邦的标签页,然后再新建一个标签页,再在这个新标签页中打开极客时间,这时候我们可以看到这两个标签页分别使用了两个不同的渲染进程。你可以参看下图:
多个标签页运行在不同的渲染进程中
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《浏览器工作原理与实践》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • Geek_259055
    老师期待你的Proformance加餐哦

    作者回复: 在规划中,一篇篇来

    2019-11-15
    2
    4
  • Geek_177f82
    老师之前知否自己出过课程?或者书籍,博客之类的。希望老师提供下。

    作者回复: 之前都是工作在一线,也没精力输出内容。

    主要是现在自己搞了个小公司,时间上可以自由点了,那会刚好winter老师推荐我来极客时间写个浏览器专栏,我也没想就同意了。

    博客我没有的,不过B站上到维护了一个up号,叫 二进制学院,那个账号翻译内容偏多!

    关于资料,我计划在加餐结束后、整理份详细的发出来!

    2019-11-20
    2
  • tokey
    老师,阿里为什么要把同一站点的tab签做成无连接的,会避免什么安全隐患啊?

    作者回复: 如果多个标签在同一个进程中,那么一个标签沦陷了,其它标签都会沦陷的

    2019-11-20
    2
  • 同源要求协议、域名以及端口均一样才行;同一站点只要求协议,根域名相同即可。也就是同源的要求太严格,导致复用同一渲染进程的条件比较难满足,所有条件放宽至同一站点?

    作者回复: 第一原因是通常同一站点安全性是有保障的
    第二个原因就是你提到的资源的复用了

    2019-11-15
    2
  • YElllllOW
    老师简直牛逼!期待加餐结束后的详细资料!
    2019-12-01
  • Snow同學
    希望老师能出一篇,如何监测收集线上用户使用网站时的性能数据。
    觉得虽然开发时进行了页面性能测试,但是用户使用时,可能还会出现很多我们的盲点未考虑到。
    线上监测感觉还是很有必要的
    2019-11-24
  • CC
    老师你好,我有一个疑问。

    在课程中,网络一直是当做一个进程来看待(network process)。

    但是在查询资料的过程中,看到一篇 Google 的文章,作者说网络是浏览器进程内的一个线程(network thread)。文章附在最后。

    这篇文章是 2018 年 9 月写的,是因为现在 Chromium 把网络线程从浏览器进程中拆分出来了吗?

    提前谢谢老师。

    文章:
    Inside look at modern web browser (part 2)
    https://developers.google.com/web/updates/2018/09/inside-browser-part2
    2019-11-24
  • Jimmy
    老师,想请教一个chrome内存的问题, 就是我开了chrome 的任务管理器,我有看到内存占用空间远大于js内存,和GPU内存还有图片,css, js cache 之和,那要如何排查总内存是因为什么影响呢?。具体的场景就是,我有一个登录页面,本来内存大概150M, js 内存大概60M, 我登录到主页面使用一段时间,退出登录,但是我看到js 内存已经恢复了60M 左右,说明js 是没用内存泄漏的,不过问题是主内存显示确实500M, 并没有恢复到150M, 放了三个小时候依旧如何,但我看GPU内存, js 内存,图片cache 这些都已经正常了, 所以如何排查这500M 总内存到底是如何来的呢 ?
    2019-11-20
  • 爱吃锅巴的沐泡
    老师在第5节课中说布局计算太复杂,要放在后面说,是不是在加餐中?很期待呀
    2019-11-18
  • Lx
    1、业务场景的需求
    实际的复杂业务场景中,经常会不同的站点提供不同的业务功能。他们同属于同一公司主域,但却分属不同部门子域。同一站点策略即保持统一也能保证各自独立。且同公司场景有交互的场景需求。
    2、同源策略从安全角度考虑没问题,但对于各系统通信未免严格了些。
    2019-11-18
  • 许童童
    加餐来了,老师太棒了
    2019-11-16
  • 梦已沉沦
    是不是在多标签页时,同一站点比同源能有效节约进程

    作者回复: 这也是一个原因

    2019-11-15
收起评论
12
返回
顶部