web Workers

菜鳥文檔 web worker 是運行在后臺的 JavaScript,不會影響頁面的性能。

JavaScript 是單線程,一個時期只能做一件事情,做完一件再做一件,就好比一個人做飯,不能邊摘菜邊洗米,必須做完一件再做一件。也就是有排隊的概念。

什么是異步請求?

異步請求就是先發(fā)請求,然后該干嘛干嘛,等到發(fā)的請求有結果了,再執(zhí)行對應的操作,就好比做飯,先把米放到電飯鍋,在等米飯熟的過程中,你可以炒菜,等米飯熟了,再盛出來吃。

所以實際開發(fā)中,多線程和異步請求是能提高網(wǎng)頁性能的。

實際上計時器setInterval和SetTimeout都是異步請求,他們都會排到隊列的后面,就算時間是0,只要出現(xiàn)就是要排到隊列的后面。

所以會有面試問代碼輸出的順序,在計時器里的一定是最后輸出的,就算時間是0,就算寫在最前面,都沒啥用。

所以總結下來

Web Workers 就是多線程執(zhí)行javascript

任務分配下來,它會分配給其他人去做,等到有結果了,接收
比如寒假作業(yè)布置下來, 你直接分配給其他人去做,一個人做語文,一個人做數(shù)學,等他們做完了,你把作業(yè)收回來就行了,這樣你就很輕松了。

步驟:1.分配任務,讓誰執(zhí)行

var w=new Worker("xiaoming.js");//new一下,分配給小明做

2.接收結果 onmessage

w.onmessage=function(e){
        console.log(e.data);//e.data就是結果
        if(e.data.flag){
            w.terminate();//結束進程
        }
    }

結束進程要慎重,因為有時候不是一次響應就可以,要等到執(zhí)行完才停止,所以要加判斷條件
3.被分配做任務的那個人要發(fā)信息 postMessage,這樣才可以接收到啊
xiaoming.js如下

var total=0;
for(var i=1;i<100;i++){

    postMessage({
        val:i,
        flag:i==99?true:false//意思是當i是99的時候,為true,結束進程
    });
    total+=i;
}

e.data拿到的就是postMessage括號里面的值。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容