91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

瀏覽器的事件循環的機制流程

發布時間:2020-06-15 14:07:15 來源:億速云 閱讀:195 作者:鴿子 欄目:web開發

前言

瀏覽器事件循環,基礎面試中大部分都會問的,本文講講這個知識點。

事件循環機制

事件循環是負責執行代碼、收集和處理事件以及執行隊列中的子任務的一套機制。

在事件循環機制中,使用的棧數據結構便是執行上下文棧,每當有函數被調用時,便會創建相對應的執行上下文并將其入棧;使用到堆數據結構主要是為了表示一個大部分非結構化的內存區域存放對象;使用到的隊列數據結構便是任務隊列,主要用于存放異步任務。如下圖:

執行上下文棧

在JavaScript代碼運行過程中,會進入到不同的執行環境中,一開始執行時最先進入到全局環境,此時全局上下文首先被創建并入棧,之后當調用函數時則進入相應的函數環境,此時相應函數上下文被創建并入棧,當處于棧頂的執行上下文代碼執行完畢后,則會將其出棧。這里說的棧就是執行上下文。

任務隊列

在事件循環機制中,存在多種任務隊列,其分為宏任務隊列和微任務隊列兩種。

宏觀任務

宏任務包括setTimeout、setInterval、I/O、UI rendering。

微任務

微任務包括Promise、Object.observe(已廢棄)、MutationObserver(html5新特性)。

事件循環機制的流程

  1. 主線程執行JavaScript整體代碼,形成執行上下文棧,當遇到各種任務源時將其所指定的異步任務掛起,接受到響應結果后將異步任務放入對應的任務隊列中,直到執行上下文棧只剩全局上下文;

  2. 將微任務隊列中的所有任務隊列按優先級、單個任務隊列的異步任務按先進先出的方式入棧并執行,直到清空所有的微任務隊列;

  3. 將宏任務隊列中優先級最高的任務隊列中的異步任務按先進先出的方式入棧并執行;

  4. 重復第 2 3 步驟,直到清空所有的宏任務隊列和微任務隊列,全局上下文出棧。

簡單來說,事件循環機制的流程就是,主線程執行JavaScript整體代碼后將遇到的各個任務源所指定的任務分發到各個任務隊列中,然后微任務隊列和宏任務隊列交替入棧執行直到清空所有的任務隊列,全局上下文出棧。

最后

雖然Node.js也有事件循環,可是它和瀏覽器的事件循環完全不是一個東西。Node.js采用V8作為js的解析引擎,而I/O處理方面使用了自己設計的libuv,libuv是一個基于事件驅動的跨平臺抽象層,封裝了不同操作系統一些底層特性,對外提供統一的API,事件循環機制也是它里面的實現。這里不展開講了,想了解的自己去看文檔。

以上就是瀏覽器的事件循環詳解的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寿光市| 五常市| 嘉义县| 静海县| 阿拉善左旗| 海兴县| 栾城县| 准格尔旗| 客服| 天门市| 永丰县| 赤城县| 呼图壁县| 南澳县| 蛟河市| 雅江县| 大洼县| 榆林市| 馆陶县| 建瓯市| 扶绥县| 新龙县| 张家川| 定安县| 甘谷县| 娱乐| 旬阳县| 扎囊县| 甘孜县| 雷波县| 苗栗市| 柯坪县| 麻栗坡县| 轮台县| 屏山县| 天门市| 颍上县| 麟游县| 光泽县| 旺苍县| 嘉定区|