日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JS线程

發(fā)布時間:2025/4/16 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近發(fā)現(xiàn)一個問題,setTimeout設(shè)置為0時,并不是瞬時0秒后觸發(fā)里面的函數(shù),從而牽引出關(guān)于js線程的一些問題。從多方資料了解了很多,現(xiàn)在做個總結(jié)加深自己的理解,也為一些不知道的朋友做個講解,歡迎指正。

我們從js的線程講起。?
瀏覽器的內(nèi)核是多線程的,他們相互配合保持同步。一個瀏覽器至少有三個常駐線程,JS引擎線程(用于處理JS事件),GUI渲染線程(用于頁面渲染),事件觸發(fā)線程(用于交互)。

幾個要點:

  • JS引擎線程:是基于事件驅(qū)動的,采用單線程運行機制。即JS引擎會只會按順序從JS隊列中取任務(wù)并執(zhí)行。所以無論什么時候都只有一個JS線程在運行JS程序

  • GUI渲染線程:與JS引擎線程是互斥的,在頁面渲染時啟用。所以頭部加載JS文件與加載CSS文件會發(fā)生阻塞現(xiàn)象。

  • 當(dāng)一個事件被觸發(fā)時該線程會把事件添加到JS隊列的隊尾,等待JS引擎的處理。如setTimeout、Ajax、鼠標(biāo)點擊事件等。

  • JS引擎分析:(網(wǎng)上圖片)?

    事件會不斷按順序存入JS隊列,由JS引擎按順序執(zhí)行。?
    要點:?
    1.JS引擎執(zhí)行到setTimeout的時候,會啟動一個計時器添加在該JS隊列后面,等到執(zhí)行到計時器時,再進(jìn)行延遲操作,所以setTimeout為0時也不是即刻執(zhí)行

    2.JS引擎執(zhí)行到Ajax時,瀏覽器會分發(fā)出一個線程專門處理回調(diào),當(dāng)產(chǎn)生狀態(tài)變更時,事件會加入JS隊列等待處理。這就是所謂的異步

    其實JS隊列也不是一定按順序執(zhí)行,不同瀏覽器會有不同的事件循環(huán)來輪詢JS隊列,找出更優(yōu)先的事件,當(dāng)然,這部分內(nèi)容屬于高深內(nèi)容,等我升級了再學(xué),現(xiàn)在只要記住按順序就行了

    一次事件改變頁面的JS線程簡單示意圖:?

    轉(zhuǎn)載于:https://www.cnblogs.com/ZpandaZ/p/7397071.html

    總結(jié)

    以上是生活随笔為你收集整理的JS线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。