1. 程式人生 > 其它 >js高階_H5 Web Worker多執行緒

js高階_H5 Web Worker多執行緒

如果主執行緒做回撥運算那麼頁面會無法操作

如,點選計算後,如果數值過大,可能要等待很久。
點選之後,js引擎主執行緒在不斷的運算,而介面在js主執行緒運算的時候操作不了,因為遞迴效率比較低,所以響應你介面操作的主執行緒還在後面計算中,它沒有時間響應你,所以介面就卡住了。如果要給使用者好的體驗,要把主執行緒操作的運算放入分執行緒去做。


H5 Web Worker多執行緒介紹

H5 Web Worker是HTML5提供的一個JavaScript多執行緒解決方案。
我們可以將一些大計算量的程式碼交由Web Worker執行而不凍結使用者介面,但是分執行緒完全受主執行緒控制,且不得操作DOM。所以這個新標準並沒有改變js單執行緒的本質。

使用

①建立在分執行緒執行的js檔案

裡面的程式碼紅色部分是固定寫法

②在主執行緒的js中發訊息並設定回撥

worker建構函式裡的引數是你建的js檔案地址



圖解

缺點

①慢
②不能跨域載入js
③worker內程式碼不能訪問DOM(更新 UI)
④不是每個瀏覽器都支援

優化上面的問題


②worker的js如下:

function fibonacci(n){
		//1 1 2 3 5 8 13  21
		return n<=2?1:fibonacci(n-1)+fibonacci(n-2);
	};
	
var onmessage=function(event){
	var number=event.data;
	console.log("分執行緒接收到主執行緒傳送來的資料"+number);
	var  result=fibonacci(number);
	
	postMessage(result);
	
	console.log("分執行緒向主執行緒返回資料"+result);
	
	//alert是window的方法,在分執行緒 不能呼叫,因為分執行緒是單獨的一個全域性 上下文物件。這裡面的this不是window
	//分執行緒 中 的 全域性 物件  不再是 window,所以在分執行緒 中不可以更新介面
}