瀏覽器中的執行緒介紹
通常乙個瀏覽器會至少存在三個執行緒:js引擎執行緒(用於處理js)、gui渲染執行緒(用於頁面渲染)、瀏覽器時間觸發執行緒(用於控制互動)。
而因為js可以操作dom元素,進而會影響到gui的渲染結果,因此js引擎執行緒與gui渲染執行緒是互斥的。也就是說當js引擎執行緒處於執行狀態時,gui渲染執行緒將處於凍結狀態。
js引擎是基於事件驅動,採用的是單執行緒執行機制。即js引擎會只會順序的從任務列表中取任務,並執行。
settimeout/setinternal
其中settiemout:在指定的毫秒數後呼叫指定的**段;setinternal:在指定的時間間隔內(ms)迴圈呼叫指定的**段。這兩個函式內都涉及到時間計數器,也就是都涉及到乙個類似與mfc定時器。js引擎本身就只能單執行緒執行,因此定時器需要由其他的外部執行緒來啟動。所以對js引擎而言,定時器執行緒可以被視為非同步執行緒。但當定時器時間到達後,所觸發的事件則必須在任務列表中排隊,等候js引擎的處理。
關於settimeout下面有乙個例子,可以幫助深入理解:
settimeout(function () }, 1000);
settimeout(function () , 2000);
settimeout(function () , 100);
alert('end');
執行的結果是彈出『end』『end 1』,然後瀏覽器假死,就是不彈出『end 2』。也就是說第乙個settimeout裡執行的時候是乙個死迴圈,這個直接導致了理論上比它晚一秒執行的第二個settimeout裡的函式被阻塞,這個和我們平時所理解的非同步函式多執行緒互不干擾是不符的。
(1)ui執行緒
(2)js執行緒
(3)事件(觸發)執行緒
引用的網頁:
例子:w3c給出的settimeout/setinternal的函式介紹及使用示例
js的多執行緒介紹(裡面畫了一張介紹任務佇列機制的原理圖,圖畫的清楚,解釋的也很清楚)
瀏覽器UI執行緒 和 js執行緒
瀏覽器中的執行緒介紹 通常乙個瀏覽器會至少存在三個執行緒 js引擎執行緒 用於處理js gui渲染執行緒 用於頁面渲染 瀏覽器時間觸發執行緒 用於控制互動 而因為js可以操作dom元素,進而會影響到gui的渲染結果,因此js引擎執行緒與gui渲染執行緒是互斥的。也就是說當js引擎執行緒處於執行狀態時...
UI執行緒和非UI執行緒的互動方式
一般應該把像讀寫檔案 請求網路這類的耗時操作放在子執行緒中去執行,這樣可以避免ui執行緒的響應事件過慢,但是很多情況下在子執行緒中需要更新介面,比如從網路中獲取到或者響應字串後,將結果顯示到介面上,但是在子執行緒中不允許直接更新ui介面,這時就需要在子執行緒中將結果返回給ui執行緒,由ui執行緒來負...
js判斷瀏覽器,包括Edge瀏覽器
描述 判斷瀏覽器資訊 編寫 littleqiang w 日期 2016.1.5 版本 v1.1 判斷當前瀏覽型別 function browsertype else if fieversion 8 else if fieversion 9 else if fieversion 10 else ie版...