1.背景介紹
????同步指的是一次只能完成一件任務,如果有多個任務,就必須排隊,前面一個任務完成,再執行后面一個任務,以此類推,
????異步指的是每一個任務有一個或多個回呼函式(callback),前一個任務結束后,不是執行后一個任務,而是執行回呼函式,后一個任務則是不等前一個任務結束就執行,所以程式的執行順序與任務的排列順序是不一致的、異步的,
2.知識剖析
????首先js是單執行緒的語言,即同一時間只能做做一件事,那Js如何實作異步的,異步和單執行緒不是自相矛盾嗎?其實,單執行緒和異步確實不能同時成為一個語言的特性,js選擇了成為單執行緒的語言,所以它本身不可能是異步的,但js的宿主環境(比如瀏覽器,Node)是多執行緒的,宿主環境通過某種方式(事件驅動,下文會講)使得js具備了異步的屬性,
????瀏覽器的內核是多執行緒的,它們在內核制控下相互配合以保持同步,一個瀏覽器至少實作三個常駐執行緒:javascript引擎執行緒,UI渲染執行緒,瀏覽器事件觸發執行緒,
1.javascript引擎執行緒是基于事件驅動單執行緒執行的,JS引擎一直等待著任務佇列中任務的到來,然后加以處理,瀏覽器無論什么時候都只有一個JS執行緒在運行JS程式,
?
2.UI渲染執行緒負責渲染瀏覽器界面,當界面需要重繪(Repaint)或由于某種操作引發回流(reflow)時,該執行緒就會執行,但需要注意 UI渲染執行緒與JS引擎是互斥的,當JS引擎執行時UI執行緒會被掛起,UI更新會被保存在一個佇列中等到JS引擎空閑時立即被執行,
?
3.事件觸發執行緒,當一個事件被觸發時該執行緒會把事件添加到待處理佇列的隊尾,等待JS引擎的處理,這些事件可來自JavaScript引擎當前執行的代碼塊如setTimeOut、也可來自瀏覽器內核的其他執行緒如滑鼠點擊、AJAX異步請求等,但由于JS的單執行緒關系所有這些事件都得排隊等待JS引擎處理,
3.常見問題 及 解決方案
ajax發送異步請求瀏覽器做了什么?
1.Js創建了一個ajax請求
2.瀏覽器另外開啟一個ajax引擎執行緒,執行ajax請求
3.執行得到回應后將回呼函式放入任務佇列中,
4.Js執行任務佇列中的回呼函式,
有哪些常見異步回呼函式?
1,點擊時間,
2,定時器,
3,AJAX請求,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/252690.html
標籤:其他
上一篇:Nginx優化服務之網頁壓縮
