記錄在JavaScript中對事件迴圈的理解

来源:https://www.cnblogs.com/zhstudyroom/p/18145712
-Advertisement-
Play Games

一、代碼分割 一個大型前端應用,如果所有代碼都放在單一文件,體積會特別大,下載時間長,白屏時間久,用戶體驗差。 代碼分割是一種有效的優化方式。提前把代碼切分為多個小塊,只下載當前必需的部分,用到哪塊下載哪塊。就像吃自助餐一樣,吃多少拿多少。 早期的代碼分割一般通過 webpack 實現。隨著 ES6 ...


JavaScript 事件迴圈通俗解釋

好的,用更通俗的話來說,事件迴圈就像是在一個大劇院里,有一個演員(JavaScript引擎)和兩個重要的角色:一個是前臺的表演者(調用棧),另一個是後臺的候場區(事件隊列)。

前臺表演者:這個演員在前臺表演,一次只能表演一個節目(單線程執行)。當一個節目(函數)開始時,演員就上臺表演,表演結束,演員就下臺(函數執行完畢,從調用棧中彈出)。

後臺候場區:有些節目需要準備,比如換衣服、化妝等,這些準備工作不會在臺上直接做,而是在後臺候場區進行。這就是事件隊列,非同步任務的回調函數(比如網路請求的結果)會先在這裡排隊等待。

劇院導演:事件迴圈就是劇院的導演,它負責監督整個劇院的運作。導演會不斷檢查演員是否已經下臺(調用棧是否為空),如果演員下臺了,導演就會從候場區選一個節目放到前臺去表演。

優先順序:導演在選節目時,會優先考慮那些需要立即處理的小節目(微任務,比如Promise的回調),然後再考慮那些大型的節目(巨集任務,比如setTimeout)。

不堵塞:因為演員不需要在後臺等待準備工作完成,所以即使後臺有很多準備工作要做,也不會影響到前臺的表演,這就是非阻塞I/O。

劇院的效率:雖然演員可以同時處理很多準備工作,但如果後臺的準備工作太多,也會影響劇院的效率,所以合理地安排節目(管理非同步任務)是很重要的。

不同劇院的導演:不同的JavaScript環境(瀏覽器或Node.js)可能有不同的導演(事件迴圈的具體實現可能略有不同),但他們的基本工作方式是相似的。

所以,事件迴圈就是JavaScript世界中的導演,它確保了前臺的表演(代碼執行)和後臺的準備工作(非同步任務處理)能夠有序、高效地進行。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 函數是一組一起執行一個任務的語句。 您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常是根據每個函數執行一個特定的任務來進行的。 函數聲明告訴編譯器函數的名稱、返回類型和參數。函數定義提供了函數的實際主體。 函數定義 函數就是包裹在花括弧中的代碼塊,前面使 ...
  • 介紹 本示例介紹使用了Tab組件實現自定義增刪Tab頁簽的功能。該場景多用於瀏覽器等場景。 效果圖預覽 使用說明: 點擊新增按鈕,新增Tab頁面。 點擊刪除按鈕,刪除Tab頁面。 實現思路 設置Tab組件的barHeight為0,隱藏組件自帶的TabBar。 Tabs() { ... } .barH ...
  • 主題搗鼓日記 sakura版本(YYDS) 主要框架都沒怎麼動,功能挺完整的。但是如果要DIY還是得自己把代碼捋一遍,不然從哪改起都不知道,註釋不能說完全沒用。。。 搗鼓了兩天兩夜,還是有很多細節沒改好,main.js翻了四五遍,看評論區發現諸多細節還要改CSS文件,太難了。。前端都忘得差不多了,趕 ...
  • 一、題目及運行環境 1.小組成員 2252331 與 2252336 2.題目 小學老師要每周給同學出300道四則運算練習題。 這個程式有很多種實現方式: C/C++ C#/VB.net/Java Excel Unix Shell Emacs/Powershell/Vbscript Perl Pyt ...
  • 什麼是介面重覆提交? 介面重覆提交指的是在網路通信中,同一個請求被客戶端多次發送到伺服器端的情況。這種情況可能由於多種原因導致,例如用戶在等待期間多次點擊提交按鈕、網路超時後客戶端重新發送請求、客戶端發送的請求在網路傳輸過程中出現重覆等。 介面重覆提交可能會導致多種問題,當伺服器收到重覆請求時,可能 ...
  • 其他章節請看: vue3 快速入門 系列 他API 前面我們已經學習了 vue3 的一些基礎知識,本篇將繼續講解一些常用的其他api,以及較完整的分析vue2 和 vue3 的改變。 淺層響應式數據 shallowRef shallow 中文:“淺層的” shallowRef:淺的 ref()。 先 ...
  • 零代碼指的是藉助VuePress 通過簡單配置,幫助我們生成靜態網站。 零成本指的是藉助GitHub Pages 或者Gitee Pages部署網站,讓互聯網上的小伙伴能訪問到它 ...
  • XQuery 是 XML 數據的查詢語言,類似於 SQL 是資料庫的查詢語言。它被設計用於查詢 XML 數據。 XQuery 示例 for $x in doc("books.xml")/bookstore/book where $x/price > 30 order by $x/title retu ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...