1. 程式人生 > >HTML5新特性 Web Workers 實現多執行緒

HTML5新特性 Web Workers 實現多執行緒

引子:(JS單執行緒)

什麼是webworker?
Web Worker為Web應用程式提供了一種能在後臺中執行的方法。通過Web Worker可以生成多個執行緒同時執行,並保證頁面對使用者的及時響應,完全不會影響使用者的正常操作。

單執行緒:單執行緒在程式執行時,所走的程式路徑按照連續順序排下來,前面的必須處理好,後面的才會執行。簡單的說就是處理事務的任務鏈,當只有一條鏈,所有的事情都在這一條鏈上執行時,那就是單執行緒。

優點:單執行緒較多執行緒來說,系統穩定、擴充套件性極強、軟體豐富。

缺點:只有一個執行緒,程式碼順序執行,容易出現程式碼阻塞(頁面假死)。

多執行緒:為Js 提供了多執行緒處理能力,一些複雜、資料量大的處理時可以讓別的執行緒去處理,處理的同時不影響主執行緒的執行(簡稱非同步),從而讓頁面執行更加流暢而且不失效果。

Web Worker說明:

Web主執行緒:
1.通過 worker = new Worker( url ) 載入一個JS檔案來建立一個worker,同時返回一個worker例項。
  url:  需要非同步處理的js檔案路徑
2.通過 worker.postMessage( data ) 方法來向worker傳送資料。   data: 要傳送的資料
3.繫結 worker
.onmessage(value)方法來接收worker傳送過來的資料。   value: postMessage傳送過來的資料
4.可以使用 worker.terminate() 來終止一個worker的執行。 worker子執行緒: 1.通過postMessage( data ) 方法來向主執行緒傳送資料。 2.繫結onmessage方法來接收主執行緒傳送過來的資料。

  

程式碼如下:

1)建立一個Worker:

通常,與web worker相關的程式碼都放在一個獨立的JavaScript檔案中。父執行緒通過在Worker建構函式中指定一個JavaScript檔案的連結來建立一個新的worker,它會非同步載入並執行這個JavaScript檔案。

// var worker = new Worker(子執行緒路徑);
// console.log(worker); //物件 身上有很多資料

let worker = new Worker('worker.js'); //建立
worker.postMessage('我是要傳遞的資料');  //postMessage方法向worker傳送資料。

2)編寫子執行緒 worker.js:

this.onmessage = function(ev){
    console.log(ev.data);  // html頁面打印出我是要傳遞的資料   注:子執行緒沒有alert
};

注意:

1.子執行緒進行計算,不能進行 DOM BOM操作
2.子執行緒不能跨域,檔案需放在同路徑中
3.子執行緒不能套子執行緒
4.子執行緒 不和主執行緒共享資料,而是複製一份兒 哪怕是物件

 

子執行緒可以直接輸入運算:

//主執行緒 html頁面
let worker = new Worker('worker1.js');
worker.postMessage(5);

 

//子執行緒 worker1.js
this.onmessage = function(ev){
console.log(ev.data+5);    //  10  
};

 

可以利用子執行緒為我們做一些計算:

let worker = new Worker('worker2.js');
worker.postMessage(10);  //向子執行緒傳送資料
worker.onmessage = function(ev){ //接收字執行緒傳送過來的資料
console.log(ev.data);  //15
};

 

//子執行緒 worker2.js
this.onmessage = function(ev){  //接收主執行緒傳送過來的資料
this.postMessage(ev.data+5);  //向主執行緒傳送資料
};

以上就是介紹js開啟多執行緒方法了。

詳情直戳官方介紹 HTML5 Web Worker http://www.w3school.com.cn/html5/html_5_webworkers.asp