當(dāng)js一個時間內(nèi)有大量的計算的時候,會導(dǎo)致瀏覽器卡頓。使用web worker,把較大計算量的方法分給分線程處理,避免主線程卡死影響用戶體驗。那么線程之間的數(shù)據(jù)是怎么交互的呢?
以裴波那契數(shù)列計算為例
主線程代碼:
let btn = document.getElementById('btn')
btn.onclick = function(){
? ? let worker = new Worker('worker.js')
? ? worker.onmessage = function (event) {// 接收消息監(jiān)聽
? ? ? ? console.log('主線程接收分線程返回的數(shù)據(jù)', event.data)
? ? }
? ? worker.postMessage(1000) // 主線程向分線程發(fā)送數(shù)據(jù)
}
分線程worker.js代碼:
function fibonacci(n) {
? ? return n <= 2 ? 1 : fibonacci(n -1) + fibonacci(n -2)
}
let onmessage = function(event) {
? ? let num =event.data
? ? let result = fibonacci(num)
? ? postMessage(result)
}
事件機制如圖所示:

web worker