日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS线程

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

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

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

幾個要點:

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

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

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

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

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

    2.JS引擎執行到Ajax時,瀏覽器會分發出一個線程專門處理回調,當產生狀態變更時,事件會加入JS隊列等待處理。這就是所謂的異步

    其實JS隊列也不是一定按順序執行,不同瀏覽器會有不同的事件循環來輪詢JS隊列,找出更優先的事件,當然,這部分內容屬于高深內容,等我升級了再學,現在只要記住按順序就行了

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

    轉載于:https://www.cnblogs.com/ZpandaZ/p/7397071.html

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。