前端面試寶典---事件循環面試題

瀏覽器進程模型與 JavaScript 執行機制

現代瀏覽器采用多進程架構,包含瀏覽器進程、渲染進程、網絡進程等多個核心進程。每個標簽頁會獨立創建一個渲染進程,負責頁面內容的解析、渲染和執行腳本代碼。

JavaScript 的單線程特性

JavaScript 采用單線程執行模型,其主線程同時承擔兩個關鍵職責:

  • GUI 渲染線程:處理 HTML/CSS 解析、樣式計算、布局繪制(每秒 60 幀渲染)
  • JS 引擎線程:執行全局代碼和回調函數

這兩個功能模塊存在互斥關系,無法并行執行。單線程設計避免了多線程環境下 DOM 操作的競態條件問題(如一個線程刪除 DOM 時另一個線程在修改),同時也簡化了語言實現復雜度。異步機制則解決了耗時操作可能造成的線程阻塞問題。

異步執行原理

同步執行模式可能導致主線程阻塞,引發頁面卡頓。瀏覽器采用異步處理機制:

  • 主線程將計時器、網絡請求等任務委托給對應線程
  • 主線程繼續執行后續同步代碼
  • 任務完成后,回調函數被封裝為任務對象加入消息隊列
  • 主線程通過事件循環機制調度這些異步任務

這種模式確保主線程始終保持響應能力,同時兼顧任務處理的時效性。

任務優先級分級

消息隊列采用分級調度策略:

  • 宏任務(MacroTask):腳本整體代碼、setTimeout、I/O 等
  • 微任務(MicroTask):Promise、MutationObserver 等

微任務具有更高優先級,確保關鍵更新能及時處理(如 Promise 的狀態變更),而定時器等相對不敏感的宏任務可以適當延遲執行。

完整事件循環流程

  1. 同步代碼執行階段
    主線程順序執行全局腳本,遇到異步 API 時移交對應模塊處理

  2. 微任務檢查并清空
    當前調用棧清空后,立即執行全部微任務隊列中的任務

  3. 宏任務處理
    選取最早的宏任務執行,執行期間產生的微任務會在該宏任務結束后立即處理

  4. 渲染時機判斷
    若距離上次渲染超過 16ms(60Hz 屏幕),或頁面內容發生變化,則執行渲染任務,若沒有,回到步驟 3 繼續執行下一個宏任務。

  5. 循環持續
    重復上述過程直至所有任務隊列清空

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84502.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

postman調用接口報錯401, Unauthorized, Invalid Token. null解決辦法

1、先登錄系統,F12找到token并復制 2、postman里選中Authorization,下拉選中選擇Bearer Token,把復制好的token黏貼到右側輸入框,如下所示: 3、如果是json格式的參數拷貝到Body中,如下所示: 4、 接口調用成功

C++----剖析list

前面學習了vector和string,接下來剖析stl中的list,在數據庫中學習過,list邏輯上是連續的,但是存儲中是分散的,這是與vector這種數組類型不同的地方。所以list中的元素設置為一個結構體,將list設計成雙向的&…

為什么已經有 Nginx 了,還需要服務網關?

在當前微服務架構中,雖然 Nginx 是一個高性能的反向代理和負載均衡服務器,但在實際使用中仍然存在諸多局限性。為了滿足運維效率、功能統一治理以及與微服務生態集成的需求,通常會在 Nginx 和業務服務之間引入一層基于 Java 實現的服務網關&a…

Kendo UI 中,ViewModel、DataSource 和 Grid的關系。Kendo 框架發起 HTTP 請求

Kendo UI 中,ViewModel、DataSource 和 Grid的關系 在 Kendo UI 中,ViewModel、DataSource 和 Grid 是構建動態數據應用的核心組件,三者協同工作實現數據的綁定、管理和展示。 一、三者關系圖解 #mermaid-svg-3lWxu2zWB23wDYEz {font-family…

宇樹開源 Qmini 雙足機器人,可通過 3D 打印動手制作,使用樹莓派作為主控制器

Unitree Qmini 是一款由宇樹科技設計并開源的低成本雙足機器人,開發者可以完全通過 3D 打印進行復刻。Qmini 專為業余愛好者、教育工作者和研究人員設計,使用戶能夠快速上手,并以類似樂高的模塊化方式組裝自己的機器人。該項目為機器人技術提…

解決華為云服務器無法ping通github問題

在push代碼到github上的時候,發現顯示22端口無法連接,在已經開放了端口,防火墻關閉的情況下仍然無法連接到GitHub。 發現是服務器和github斷連,選擇 sudo vim /etc/hosts 添加一下代碼 # GitHub Start140.82.121.4 gith…

關于electron-vite koffi 讀取 dll 打包等問題得記錄

koffi const koffi require(‘koffi’) import iconv from ‘iconv-lite’;const libPath path.resolve(__dirname, ‘…/…/resources/dll/sss.dll’) const yktLib koffi.load(libPath) const ret yktLib.func(‘string sss(string Url, string Data, string OutData)’…

【開發技術】.Net使用FFmpeg視頻特定幀上繪制內容

目錄 一、目的 二、解決方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg調用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 濾鏡來繪制 ROI 三、總結 一、目的 當前市場上有很多目標檢測智能識別的相關算法,當前調用一個醫療行業的AI識別算法后返回…

通過關鍵字批量抓取淘寶商品數據實現方法途徑分享--API

item_search 按關鍵字搜索淘寶商品item_search_tmall 按關鍵字搜索天貓商品item_search_pro 高級關鍵字搜索淘寶商品item_search_img 按圖搜索淘寶商品(拍立淘)item_search_shop 獲得店鋪的所有商品 一、引言 在電商領域,獲取淘寶商品數據對…

用 Lazarus IDE 寫一個郵件客戶端軟件,能收發郵件,編寫郵件

下面是一個使用Lazarus IDE開發的基本郵件客戶端實現方案,包含收發郵件和編寫郵件的核心功能。我們將使用Synapse庫(跨平臺的網絡通信庫)來處理郵件協議。 步驟1:安裝依賴 安裝Synapse庫: 下載地址:https:…

第二部分-IP及子網劃分

目錄 一、什么是IP? 1.1.IP地址的由來 1.2.IP地址的表示 1.3.IP地址的構成 1.4.IP地址的分類 1.5.IP地址類型 1.6.IP地址的計算 1.7.私網IP地址 1.8.特殊IP地址 二、子網劃分 2.1.什么是子網劃分及為什么要進行子網劃分? 2.2.如何進行子網劃分? 實例: …

【javascript】泡泡龍游戲中反彈和查找匹配算法

引言 泡泡龍游戲的核心玩法依賴于物理碰撞與顏色匹配的算法實現。反彈效果需要模擬泡泡與邊界或障礙物的彈性碰撞,確保軌跡符合物理規律;匹配算法則需快速檢測相鄰同色泡泡,觸發消除邏輯。高效的處理方式直接影響游戲流暢度和玩家體驗。 以…

如何使用deepseek滿血版

deepseek 訪問方式 DeepSeek滿血版可通過官方網站或官方應用商店下載安裝。確保設備滿足最低系統要求,如操作系統版本和硬件配置。 賬號注冊與登錄 訪問平臺后完成賬號注冊流程,提供必要信息并驗證郵箱或手機號。登錄后進入用戶中心,查看…

網絡管理【Linux/Unix/Windows】命令大全

在跨平臺網絡運維中,管理員常需快速切換Windows與Linux環境下的命令操作。本文整合了核心網絡管理命令的跨平臺對照表,涵蓋連通性測試、路由追蹤、DNS解析、ARP管理、會話監控等高頻場景。無論您負責服務器維護、網絡排障還是安全審計,此表可…

Gremlin創建schema(包括實體和關系)

1、構建圖譜schema,流程包括圖創建、實體構建以及關系構建。 創建圖時需要指定圖庫名稱以及主鍵字段。 實體構建時需要指定主鍵字段,每個屬性需要指定數據類型,是否非空以及默認值。關系構建時需要包括關系名稱、指向頭實體的標簽&#xff0c…

[論文閱讀]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代碼:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…

鴻蒙Next倉頡語言開發實戰教程:店鋪詳情頁

各位好,幽藍君又來分享倉頡開發教程了,今天的內容是店鋪詳情頁: 這個頁面的內容看似簡單,其實有很多小細節需要注意,主要還是讓大家熟悉List容器的使用。 整個頁面由導航欄和List容器兩大部分組成,導航欄我…

FEMFAT許可使用數據分析工具介紹

在高度競爭和快速變化的工程仿真領域,數據驅動的決策變得越來越重要。為了更好地了解FEMFAT許可的使用情況、提高資源利用率、優化工作流程,FEMFAT許可使用數據分析工具應運而生。本文將為您介紹這款強大的工具,助您輕松駕馭FEMFAT許可數據&a…

大模型原理面試題及參考答案

目錄 什么是大語言模型(LLM)?它與傳統語言模型的本質差異在哪里? 自回歸模型(autoregressive)與掩碼語言模型(masked LM)的異同是什么?各適合于哪些任務? Transformer 的核心構件——多頭自注意力機制如何捕捉長距離依賴? 位置編碼(positional encoding)的作用…

Gartner<Reference Architecture Brief: Data Integration>學習心得

數據集成參考架構解析 引言 在當今數字化時代,數據已成為企業最寶貴的資產之一。隨著企業規模的不斷擴大和業務的日益復雜,數據來源也變得多樣化,包括客戶關系管理(CRM)、企業資源規劃(ERP)、人力資源管理(HR)和市場營銷等領域的運營系統。這些系統雖然在其特定功能…