js高階_H5 Web Worker多執行緒
阿新 • • 發佈:2022-03-16
如果主執行緒做回撥運算那麼頁面會無法操作
如,點選計算後,如果數值過大,可能要等待很久。
點選之後,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,所以在分執行緒 中不可以更新介面 }