1. 瀏覽器進程
概念:進程是操作系統分配資源的最小單位,每個進程之間有獨立的地址空間
瀏覽器中存在以下進程:
- 瀏覽器進程:負責頁面顯示、用戶交互、子進程管理等功能
- 渲染進程:將HTML、CSS、JS轉化爲可交互網頁,默認每個Tab標籤都有一個渲染進程
- GPU進程,爲了實現頁面繪製和動畫效果而開發的進程
- 網絡進程,負責頁面網絡資源加載
- 插件進程,每個插件對應一個進程,防止崩潰影響瀏覽器使用
2. 瀏覽器線程
概念:線程是程序執行的最小單位,一個進程下的所有線程共享該進程的地址空間
- GUI渲染線程
負責渲染HTML元素,當界面需要重繪或者回流時就會執行,在JS引擎運行腳本期間GUI渲染線程會被掛起(如果同時進行,js可能會在渲染期間對DOM進行操作,造成許多不必要渲染或者衝突)
- Javascript引擎線程
主要負責處理JS腳本程序,運行代碼,例如V8引擎
爲什麼js是單線程的?
若多個線程同時操作DOM將需要設置鎖來解決問題,從而帶來更大的複雜性
- 定時觸發器線程
由於JS是單線程的,爲了不阻塞後續代碼執行,將定時計數任務交給定時觸發器線程
- 事件觸發線程
當一個事件被觸發時該線程會將事件處理函數添加到隊列尾部,等待JS引擎處理
- 異步http請求線程
創建XMLHttpRequest連接後新開的線程,檢測到狀態變更就會將回調事件放到任務隊列尾部,等待JS引擎執行