首頁 > web前端 > js教程 > 運行在背景的JavaScript執行緒--Web Worker

運行在背景的JavaScript執行緒--Web Worker

零下一度
發布: 2017-06-25 09:28:34
原創
1439 人瀏覽過

簡單點說,Web Worker就是一個運行在背景的JavaScript線程,不會影響頁面的回應。

我們知道,JavaScript是單執行緒的腳本語言,也就是同一時刻只能做一件事情,否則會帶來極為複雜的同步問題。例如JavaScript同時有兩個線程,一個線程負責為某個DOM節點添加內容,另一個線程刪除這個節點,這時,瀏覽器要以哪個線程為主呢?

所以,為了避免同步複雜性的問題,JavaScript從一誕生起就是單線程,這也是這門語言的特徵。

JavaScript的單執行緒機制會帶來一個問題,當有一些非常複雜的任務需要處理時,頁面必須等待任務處理完成才能回應使用者的操作,這對於頁面的回應及使用者體驗都會帶來一些負面的影響,為了解決這個問題,同時也是為了利用多核心CPU的運算能力,HTML5提出了Web Worker標準,允許JavaScript創建多個線程,但是新創建的這些線程將作為子線程並且完全受主線程的控制。且不得操作DOM,其實本質上還是單線程。 所以,我們可以把一些費時的任務交給Web Worker創建的子執行緒在後台完成,而前台頁面依然可以處理使用者的回應。

由於Web Worker創建的線程是受限的子線程,所以會有一些使用限制:

  • #Web Worker無法存取DOM節點;

  • Web Worker無法存取全域變數或是全域函數;

  • Web Worker無法呼叫alert()或confirm之類的函數;

  • Web Worker無法存取window、document之類的瀏覽器全域變數;

不過Web Worker中的Javascript依然可以使用setTimeout(),setInterval()之類別的函數,也可以使用XMLHttpRequest物件來做Ajax通訊。

目前所有主流瀏覽器均支援 web worker,除了 Internet Explorer。

 

熟悉Angular的朋友應該都很清楚,Angular1最被大家詬病就是它的髒檢查機制,當scope的資料量過多時會嚴重影響效能。而Angular2正是藉助WebWorker來把繁重的運算工作移入輔助線程,讓介面線程不受影響。

 

以上是運行在背景的JavaScript執行緒--Web Worker的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板