肝完《瀏覽器工作原理與實踐》,我總結了這些

作者:wuwhs

簡介:深圳市某科技公司 前端工程師

來源:SegmentFault  思否社區

前言

作爲一名前端 er,日常工作打交道最多(之一)的莫過於熟悉而又陌生的瀏覽器了,熟悉是每天都會基於瀏覽器的應用層面之上碼業務,陌生是很多人可能跟我一樣不熟悉其內部運行原理。

js 是怎樣運行的呢?

精美樣式頁面是怎樣渲染到電腦屏幕的呢?

在開放的互聯網它又是怎樣保證我們個人信息安全的呢?

帶着種種疑雲開始肝李兵老師的《瀏覽器基本原理與實踐》,不得不說,大家之作,通俗易懂,層層撥開雲霧見青天,下面就(非常非常)簡單總結一下。

Chrome 架構:僅僅打開了 1 個頁面,爲什麼有 4 個進程

線程和進程區別:多線程可以並行處理任務,線程不能單獨存在,它是由進程來啓動和管理的。一個進程是一個程序的運行實例。

線程和進程的關係

1、進程中任意一線程執行出錯,都會導致整個進程的崩潰。

2、線程之間共享進程中的數據。

3、當一個進程關閉後,操作系統會回收進程所佔用的內存。

4、進程之間的內容相互隔離。

單進程瀏覽器

1、不穩定。單進程中的插件、渲染線程崩潰導致整個瀏覽器崩潰。

2、不流暢。腳本(死循環)或插件會使瀏覽器卡頓。

3、不安全。插件和腳本可以獲取到操作系統任意資源。

多進程瀏覽器

1、解決不穩定。進程相互隔離,一個頁面或者插件崩潰時,影響僅僅時當前插件或者頁面,不會影響到其他頁面。

2、解決不流暢。腳本阻塞當前頁面渲染進程,不會影響到其他頁面。

3、解決不安全。採用多進程架構使用沙箱。沙箱看成時操作系統給進程上來一把鎖,沙箱的程序可以運行,但是不能在硬盤上寫入任何數據,也不能在敏感位置讀取任何數據。

多進程架構:分爲 瀏覽器進程、渲染進程、GPU 進程、網絡進程、插件進程。

缺點

1、資源佔用高。

2、體系架構複雜。

面向服務架構:把原來的各種模塊重構成獨立的服務,每個服務都可以在獨立的進程中運行,訪問服務必須使用定義好的接口,通過 IPC 通訊,使得系統更內聚、松耦合、易維護和拓展。

TCP 協議:如何保證頁面文件能被完整送達瀏覽器

HTTP 請求流程:爲什麼很多站點第二次打開速度會很快

導航流程:從輸入 URL 到頁面展示這中間發生了什麼

渲染流程(上):HTML、CSS 和 JavaScript 是如何變成頁面的

渲染流程(下):HTML、CSS 和 JavaScript 是如何變成頁面的

變量提升:javascript 代碼是按順序執行的嗎

調用棧:爲什麼 JavaScript 代碼會出現棧溢出

塊級作用域:var 缺陷以及爲什麼要引入 let 和 const

作用域鏈和閉包:代碼中出現相同的變量,JavaScript 引擎如何選擇

this:從 JavaScript 執行上下文視角講 this

當執行 new CreateObj 的時候,JavaScript 引擎做了四件事:

this 的使用分爲:

棧空間和堆空間:數據是如何存儲的

動態語言:在使用時需要檢查數據類型的語言。

弱類型語言:支持隱式轉換的語言。

JavaScript 中的 8 種數據類型,它們可以分爲兩大類——原始類型和引用類型。

原始類型數據存放在棧中,引用類型數據存放在堆中。堆中的數據是通過引用與變量關係聯繫起來的。

從內存視角瞭解閉包:詞法掃描內部函數,引用了外部函數變量,堆空間創建一個 “closure” 對象,保存變量。

垃圾回收:垃圾數據如何自動回收

編譯器和解析器:V8 如何執行一段 JavaScript 代碼的

消息隊列和事件循環:頁面是怎麼活起來的

webapi:setTimeout 是怎麼實現的

webpai:XMLHttpRequest 是怎麼實現的

宏任務和微任務:不是所有的任務都是一個待遇

使用 Promise 告別回調函數

function Bromise(executor) {
  var _onResolve = null
  this.then = function (onResolve) {
    _onResolve = onResolve
  }
  function resolve(value) {
    setTimeout(() ={
      _onResolve(value)
    }, 0)
  }
  executor(resolve, null)
}

async await 使用同步方式寫異步代碼

頁面性能分析:利用 chrome 做 web 性能分析

DOM 樹:JavaScript 是如何影響 DOM 樹構建的

渲染流水線:CSS 如何影響首次加載時的白屏時間?

分層和合成機制:爲什麼 CSS 動畫比 JavaScript 高效

頁面性能:如何系統優化頁面

虛擬 DOM:虛擬 DOM 和真實 DOM 有何不同

PWA:解決 web 應用哪些問題

WebComponent:像搭積木一樣構建 web 應用

HTTP1:HTTP1 性能優化

HTTP2:如何提升網絡速度

HTTP3:甩掉 TCP、TCL 包袱,構建高效網絡

同源策略:爲什麼 XMLHttpRequst 不能跨域請求

CSRF 攻擊:陌生連接不要隨便點

沙盒:頁面和系統之間的隔離牆

HTTPS:讓數據傳輸更安全

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/jeEkBnsqA6O88Wq3ELdSHw