
文章插圖
今天來說一下關于Web Workers是什么及Web Workers有什么用這方面的一些訊息,不少朋友對于Web Workers是什么及Web Workers有什么用這方面的信息頗感興趣的 。小編今天就為此整理一些相關的訊息,希望對有需要的朋友有所幫助 。
Web Workers 被定義萬維網聯盟(W3C)和網絡超文本應用技術工作組(WHATWG),是一個 JavaScript 的腳本,從執行的 HTML 頁面,在運行的背景,獨立腳本的可能也已經從同一 HTML 頁面執行 。Web worker 通常能夠更有效地利用多核 CPU 。
Web Workers
【說一說Web Workers是什么及Web Workers有什么用】Web Worker 的作用,就是為 JavaScript 創造多線程環境,允許主線程創建 Worker 線程,將一些任務分配給后者運行 。在主線程運行的同時,Worker 線程在后臺運行 , 兩者互不干擾 。等到 Worker 線程完成計算任務 , 再把結果返回給主線程 。這樣的好處是 , 一些計算密集型或高延遲的任務,被 Worker 線程負擔了 , 主線程(通常負責 UI 交互)就會很流暢,不會被阻塞或拖慢 。
Worker 線程一旦新建成功,就會始終運行,不會被主線程上的活動(比如用戶點擊按鈕、提交表單)打斷 。這樣有利于隨時響應主線程的通信 。但是,這也造成了 Worker 比較耗費資源,不應該過度使用 , 而且一旦使用完畢,就應該關閉 。
W3C 和 WHATWG 將 Web Worker 設想為長時間運行的腳本,這些腳本不會被響應點擊或其他用戶交互的腳本打斷 。防止此類工作人員受到用戶活動的干擾,應該使網頁在后臺運行長任務的同時保持響應速度 。
worker 的最簡單用法是執行計算量大的任務,而不會中斷用戶界面 。
Web Worker 為 Web 內容在后臺線程中運行腳本提供了一種簡單的方法 。線程可以執行任務而不干擾用戶界面 。此外,他們可以使用 XMLHttpRequest 執行 I/O (盡管 responseXML 和 channel 屬性總是為空) 。一旦創建,一個 worker 可以將消息發送到創建它的 JavaScript 代碼, 通過將消息發布到該代碼指定的事件處理程序(反之亦然) 。
Web Workers API
一個 worker 是使用一個構造函數創建的一個對象(e.g. Worker()) 運行一個命名的 JavaScript 文件 – 這個文件包含將在工作線程中運行的代碼; workers 運行在另一個全局上下文中,不同于當前的 window. 因此,使用 window 快捷方式獲取當前全局的范圍 (而不是 self) 在一個 Worker 內將返回錯誤 。
在專用 workers 的情況下 , DedicatedWorkerGlobalScope 對象代表了 worker 的上下文(專用 workers 是指標準 worker 僅在單一腳本中被使用;共享 worker 的上下文是 SharedWorkerGlobalScope 對象) 。一個專用 worker 僅僅能被首次生成它的腳本使用,而共享 worker 可以同時被多個腳本使用 。
在 worker 線程中你可以運行任何你喜歡的代碼,不過有一些例外情況 。比如:在 worker 內,不能直接操作 DOM 節點,也不能使用 window 對象的默認方法和屬性 。然而你可以使用大量 window 對象之下的東西,包括 WebSockets , IndexedDB 以及 FireFox OS 專用的 Data Store API 等數據存儲機制 。查看 Functions and classes available to workers 獲取詳情 。
workers 和主線程間的數據傳遞通過這樣的消息機制進行——雙方都使用 postMessage()方法發送各自的消息,使用 onmessage 事件處理函數來響應消息(消息被包含在 Message 事件的 data 屬性中) 。這個過程中數據并不是被共享而是被復制 。
只要運行在同源的父頁面中,workers 可以依次生成新的 workers;并且可以使用 XMLHttpRequest 進行網絡 I/O , 但是 XMLHttpRequest 的 responseXML 和 channel 屬性總會返回 null 。
專用 worker
如前文所述,一個專用 worker 僅僅能被生成它的腳本所使用 。這一部分將探討 專用 worker 基礎示例 (運行專用 worker) 中的 JavaScript 代碼:將你輸入的 2 個數字作乘法 。輸入的數字會發送給一個專用 worker , 由專用 worker 作乘法后,再返回給頁面進行展示 。
共享 worker
一個共享 worker 可以被多個腳本使用——即使這些腳本正在被不同的 window、iframe 或者 worker 訪問 。這一部分,我們會討論共享 worker 基礎示例(運行共享 worker)中的 javascript 代碼:該示例與專用 worker 基礎示例非常相像 , 只是有 2 個可用函數被存放在不同腳本文件中:兩數相乘函數,以及求平方函數 。這兩個腳本用同一個 worker 來完成實際需要的運算 。
關于線程安全
Worker 接口會生成真正的操作系統級別的線程,如果你不太小心,那么并發會對你的代碼產生有趣的影響 。然而 , 對于 web worker 來說,與其他線程的通信點會被很小心的控制,這意味著你很難引起并發問題 。你沒有辦法去訪問非線程安全的組件或者是 DOM , 此外你還需要通過序列化對象來與線程交互特定的數據 。所以你要是不費點勁兒,還真搞不出錯誤來 。
以上就是關于Web Workers是什么及Web Workers有什么用這方面的一些信息了 小編整理的這些訊息希望對童鞋們有所幫助
- 男朋友韓劇 男朋友韓劇解說
- 披薩餅底怎么做
- 說一說CSRF是什么及CSRF有什么用
- 張國榮逝世17周年說說
- 說一說GNU軟件是什么及GNU軟件有什么用
- 說一說MotionMark是什么及MotionMark有什么用
- 說一說GNU操作系統是什么及GNU操作系統有什么用
- 說一說Gzip是什么及Gzip有什么用
- 說一說Linux版本是什么及Linux版本有什么用
- 說一說輕型目錄訪問協議是什么及輕型目錄訪問協議有什么用
