Js的設(shè)計(jì)是單線程乎芳,html5引入webworker减宣,它只能用于計(jì)算鸭廷,不能修改DOM互躬,無(wú)法造成視覺(jué)上的效果友扰。然后webworker不能共享內(nèi)存颖榜,沒(méi)有線程同步的概念炬转,因此JS還是單線程嵌纲,可以把webworker當(dāng)成另外的一種回調(diào)機(jī)制闯两。
注意褥伴!JS的多線程是OS級(jí)別的。
Webworker使用方法:使用webworker做一個(gè)斐波那契計(jì)算漾狼,首先寫一個(gè)fibonacci函數(shù)重慢,如下所示:
function fibonacci(num){
if(num<=0) return 0;
if(num===1 || num===2) return 1;
var fn =1,
fn1 = 1,
fn2 = fn+fn1;
for(var i=4;i<=num; i++){
fn =fn1;
fn1=fn2;
fn2=fn+fn1;
}
return fn2;
}
把這個(gè)函數(shù)寫到worker.js里面,webworker有一個(gè)全局的函數(shù)叫onmessage逊躁,在這個(gè)回調(diào)里面監(jiān)聽接收主線程的數(shù)據(jù):
console.log("worker.js start");
onmessage = function(event){
var num = event.data;
var result = fibonacci(num);
postMessage(result);
}
計(jì)算完結(jié)果后似踱,再把結(jié)果postMessage給主線程。
主線程先啟動(dòng)一個(gè)worker子線程稽煤,把數(shù)據(jù)發(fā)給它核芽,同時(shí)監(jiān)聽onmessage,取到子線程給它傳遞的計(jì)算結(jié)果酵熙,如下main.js:
console.log("main.js start");
var worker = new Worker("worker.js");
worker.onmessage = function(event){
console.log("recieve result: "+event.data);
};
var num = 1000;
worker.postMessage(num);
然后在頁(yè)面引入這個(gè)main.js的script就行了轧简;