事件循環概念
專注于為中小企業提供網站設計制作、做網站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業農安免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了1000多家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。當主線程中的任務執行完畢后,會從任務隊列中獲取任務一個個的放在棧中執行去執行,這個過程是循環不斷的,所以整個的這種運行機制又稱為事件循環。
在事件循環機制中,使用的棧數據結構便是執行上下文棧,每當有函數被調用時,便會創建相對應的執行上下文并將其入棧;使用到堆數據結構主要是為了表示一個大部分非結構化的內存區域存放對象;使用到的隊列數據結構便是任務隊列,主要用于存放異步任務。如下圖:
執行上下文棧
在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,事件循環機制也是它里面的實現。這里不展開講了,想了解的自己去看文檔。
以上就是瀏覽器的事件循環的詳細內容,更多請關注創新互聯其它相關文章!
網頁題目:瀏覽器中的事件循環是什么-創新互聯
文章網址:http://m.newbst.com/article36/dihgpg.html
成都網站建設公司_創新互聯,為您提供小程序開發、網站營銷、響應式網站、網站維護、微信公眾號、自適應網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯