<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                >[danger]瀏覽器的Eventloop 和 node的Eventloop區別 瀏覽器和 Node.js 中的 Event Loop 都是 JavaScript 運行環境的一部分,但它們之間存在一些區別。 1. 實現方式不同 在瀏覽器中,Event Loop 是由瀏覽器內核提供的。在不同的瀏覽器中,實現方式可能會有所不同。 在 Node.js 中,Event Loop 是由 libuv 庫提供的。 2. 宏任務和微任務不同 在瀏覽器中,事件循環中分為宏任務(macro-task)和微任務(micro-task)。 - 宏任務包括 script(整體代碼)、setTimeout、setInterval、I/O、UI 交互事件等等。 - 微任務包括 Promise.then()、MutaionObserver、process.nextTick(Node.js 中獨有)等等。 在 Node.js 中,事件循環中也存在宏任務和微任務。但是微任務它僅有 process.nextTick 和 Promise ,即 Node.js 中沒有像瀏覽器中的 MutationObserver 類似的 API 可以用于創建微任務。 3. 觸發時機不同 在瀏覽器中,每一個時間循環 Tick 的執行順序通常為: - 執行一個宏任務(棧中沒有就從事件隊列中獲取) - 執行過程中如果遇到了微任務,就將它添加到微任務的任務隊列中 - 宏任務執行完畢后,立即執行當前微任務隊列中的所有微任務(依次執行) - 當前 Tick 執行完畢,開始檢查渲染,然后 GUI 線程接管渲染 - 渲染完畢之后,JS 線程繼續接管,開始下一個 Tick,重復上述步驟 在 Node.js 中,事件循環的執行順序如下: - timers 階段:執行 setTimeout() 和 setInterval() 設定的時間回調函數。 - pending callbacks 階段:執行系統級別操作的回調函數(例如完成 TCP 連接后的回調函數) - idle, prepare 階段:僅 node 內部使用。 - poll 階段:獲取新的 I/O 事件,執行與 I/O 相關的回調函數 (除了 close 事件,它有自己的處理方式,不在這個階段處理)。 - check 階段:執行 setImmediate() 回調函數。 - close callbacks 階段:執行 socket、文件等關閉的回調函數。 可以看出,在瀏覽器中,每個事件循環 Tick 都會執行完所有微任務再次執行宏任務;而在 Node.js 中,則是在每個階段執行完畢后才開始執行微任務,即微任務會在每個階段之間執行。同時,Node.js 還有一個與瀏覽器不同的 setImmediate() API,它會在當前階段結束后立即執行回調函數。 總結:雖然瀏覽器和 Node.js 中的 Event Loop 都是 JavaScript 運行環境的一部分,但它們之間存在一些區別。比如宏任務和微任務的定義不同、觸發時機不同等。因此,在編寫跨平臺 JS 代碼時,需要注意其兼容性問題。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看