你是否遇到过在浏览器中单页面的卡死或者崩溃导致浏览器所有页面最终崩溃?
浏览器的多进程架构设计会让每一个页面会拥有一个自己独立的进程,按照这个逻辑来说单个页面的卡死或崩溃应该只会造成该页面所处的进程崩溃,而不会影响其他页面的进程,但是有一种情况是多个页面使用同一进程,这就是”同一站点“。
什么是同一站点?
我们将”同一站点“定义为根域名(例如,baidu.com)加上协议(例如,https:// 或者 http:// ),还包含了该根域名下的所有子域名和不同的端口,比如下面这三个:
https://baidu.com
https://www.baidu.com
https://www.baidu.com:8080
以上三个页面都是属于同一站点,因为他们的协议都是 https ,而且根域名也都是 baidu.com 。
你肯定听说过”同源策略“,但同一站点和同源策略还是存在一些不同的地方,这个以后会单独写一篇文章来说,在这里你需要了解他们不是同一件事情就可以了。
Chrome 的默认策略是,每个标签对应一个渲染进程。但是如果从一个页面打开了新页面,而新页面和当前页面属于同一个站点,那么新页面会复用父页面的渲染进程。官方把这个默认策略叫做”process-per-site-instance"。
简单的来说就是,如果几个页面属于同一站点,那么他们将会被分配到同一个渲染进程中。
所以这种情况下,一个页面崩溃了,会导致同一站点的页面同时崩溃,因为他们使用了同一个渲染进程。
那么为什么要让他们在同一个进程里面呢?
因为在一个渲染进程中,他们就会共享 JS 的执行环境,也就是说 A 页面可以直接在 B 页面中执行脚本。因为是同一家公司的站点,所以这个需求是存在的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。