你是否遇到過在瀏覽器中單頁面的卡死或者崩潰導致瀏覽器所有頁面最終崩潰?
瀏覽器的多進程架構設計會讓每一個頁面會擁有一個自己獨立的進程,按照這個邏輯來說單個頁面的卡死或崩潰應該只會造成該頁面所處的進程崩潰,而不會影響其他頁面的進程,但是有一種情況是多個頁面使用同一進程,這就是”同一站點“。
什么是同一站點?
我們將”同一站點“定義為根域名(例如,)加上協議(例如, 或者 ),還包含了該根域名下的所有子域名和不同的端口,比如下面這三個:
https://baidu.com

https://www.baidu.com
https://www.baidu.com:8080
以上三個頁面都是屬于同一站點,因為他們的協議都是 https瀏覽器崩潰是什么原因,而且根域名也都是 。
你肯定聽說過”同源策略“,但同一站點和同源策略還是存在一些不同的地方,這個以后會單獨寫一篇文章來說,在這里你需要了解他們不是同一件事情就可以了。
的默認策略是,每個標簽對應一個渲染進程。但是如果從一個頁面打開了新頁面,而新頁面和當前頁面屬于同一個站點,那么新頁面會復用父頁面的渲染進程。官方把這個默認策略叫做”-per-site-"。
簡單的來說就是瀏覽器崩潰是什么原因,如果幾個頁面屬于同一站點,那么他們將會被分配到同一個渲染進程中。
所以這種情況下,一個頁面崩潰了,會導致同一站點的頁面同時崩潰,因為他們使用了同一個渲染進程。
那么為什么要讓他們在同一個進程里面呢?
因為在一個渲染進程中,他們就會共享 JS 的執行環境,也就是說 A 頁面可以直接在 B 頁面中執行腳本。因為是同一家公司的站點,所以這個需求是存在的。