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

在默认情况下,如果打开一个标签⻚,那么浏览器会默认为其创建一个渲染进程。(分别打开这两个标签⻚)

如果从一个标签⻚中打开了另一个新标签⻚,当新标签⻚和当前标签⻚属于同一站点的话,那么新标签⻚会复用当前标签⻚的渲染进程。 (相同协议、相同根域名)

浏览器标签⻚之间是可以通过 JavaScript 脚本来连接的,通常情况下有如下几种连接方式:

  1. 第一种是通过标签来和新标签建立连接

    <a href="https://time.geekbang.org/" target="_blank" class="">极客时间</a>
  2. 通过 JavaScript 中的 window.open 方法来和新标签⻚建立连接

    new_window = window.open("http://time.geekbang.org")

    Chrome 浏览器会将浏览上下文组中属于同一站点的标签分配到同一个渲染进程中,浏览上下文组 ( browsing context group)

一个“例外”

Chrome 浏览器为标签⻚分配渲染进程的策略了:

  1. 如果两个标签⻚都位于同一个浏览上下文组,且属于同一站点,那么这两个标签⻚会被浏览器分配到同一个渲染进程中。
  2. 如果这两个条件不能同时满足,那么这两个标签⻚会分别使用不同的渲染进程来渲染。
链接使用了ref = noopener

a 链接的 rel 属性值都使用了 noopener 和 noreferrer,通过noopener,我们能猜测得到这两个值是让被链接的标签⻚和当前标签⻚不要产生连接关系。

站点隔离

目前 Chrome 浏览器已经默认实现了站点隔离的功能,这意味着标签⻚中的 iframe 也会遵守同一站点的分配原则,如果标签⻚中的 iframe 和标签⻚是同一站点,并且有连接关系,那么标签⻚依然会和当前标签⻚运行在同一个渲染进程中,如果 iframe 和标签⻚不属于同一站点,那么 iframe 会运行在单独的渲染进程中。
举个例子:

<head>
<title>站点隔离:demo</title>
<style>
iframe {
width: 800px;
height: 300px;
}
</style>
</head>
<body>
<div><iframe src="iframe.html"></iframe></div>
<div><iframe src="https://www.infoq.cn/"></iframe></div>
<div><iframe src="https://time.geekbang.org/"></iframe></div>
<div><iframe src="https://www.geekbang.org/"></iframe></div>
</body>
</html>

这四个标签页使用了四个渲染进程。
渲染进程数目的流程图如下:

此文章为5月Day3学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪

豪猪
4 声望4 粉丝

undefined