瀏覽器處理同步非同步機制

2022-04-06 07:54:34 字數 1111 閱讀 1557

首先瀏覽器是多執行緒的,js是單執行緒的(瀏覽器只給js分配了乙個執行緒)

單執行緒的特點就是一次只能處理一件事情。(後乙個任務需要等待前乙個任務的執行,這就可能出現長時間的等待)

js在單執行緒中實現非同步機制主要依賴瀏覽器的任務佇列

任務佇列分為主任務佇列,等待任務佇列

在主任務佇列自上而下執行的時候,如果遇到乙個非同步操作任務,不會立即執行而是把它放到等待任務佇列中去排隊

當主任務佇列完成後才會到等待任務佇列中進行查詢(主任務佇列完不成,不管等待任務佇列是否到達時間,都不做處理,會繼續等待主任務佇列完成)

等待任務佇列中的內容,先達到條件的會被重新放到主任務佇列中執行,然後接著去等待任務佇列中查詢

這就是因為js是單執行緒的。只能處理一件事情~~

單執行緒就意味著,所有任務需要排隊,前乙個任務結束,才會執行後乙個任務。如果前乙個任務耗時很長,後乙個任務就不得不一直等待

非同步:在主棧中執行乙個任務,但是發現這個任務是乙個非同步的操作,會把它移除主棧放到等待任務佇列中

非同步程式設計裡面又分為巨集任務和微任務

巨集任務有定時器、事件繫結、ajax、**函式、node中fs模組

微任務有promise、async await、process.nexttick

執行順序:先執行主任務,執行完接著執行微任務,最後執行巨集任務,按照條件的順序依次執行。

這種迴圈機制又叫事件迴圈(event loop)

栗子:

async function

as1()

async

function

as2()

console.log('script start');

settimeout(

function

(),0)

as1();

new promise(function

(resolve)).then(

function

());

console.log('script end');

//script start => as1 start => as2 => prom1 => script end

//=> as1 start => prom2 => settimeout

瀏覽器快取機制

最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...

瀏覽器快取機制

當我們瀏覽乙個頁面發現有異常時,通常考慮的就是書不是瀏覽器做了快取呢,按ctrl f5重新請求一次就能請求到沒有快取的頁面,這個是為什麼呢。首先,ctrl f5組合鍵重新整理頁面,那麼瀏覽器會直接向目標url傳送請求,而不再使用瀏覽器快取的資料。其次,當請求到達伺服器端依然有可能出現使用伺服器端的資...

瀏覽器快取機制

瀏覽器快取機制 瀏覽器快取機制,其實主要就是 協議定義的快取機制 如 expires cache control 等 但是也有非 協議定義的快取機制,如使用 html meta 標籤,web 開發者可以在 html 頁面的節點中加入 標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪問都需...