HTML5新特性 Web Workers 實現多執行緒
阿新 • • 發佈:2018-11-10
引子:(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