后臺運行JS——Web Worker

當在 HTML 頁面中執行腳 本(JS)時,頁面的狀態是不可響應的,直到腳本已完成。

通過使用Web Worker, 我們可以在瀏覽器后臺運行Javascript, 而不占用瀏覽器自身線程。Web Worker可以提高應用的總體性能,并且提升用戶體驗。

代碼參考: ?www.runoob.com/html/html5-webworkers.html

1、在后臺運行Javascript

一般來說Javascript和頁面的UI會共用一個線程,所以當點擊一個按鈕開始運行Javascript后,在這段代碼運行完畢之前,頁面是無法響應用戶操作的,換句話來說就是被“凍結”了。而這段代碼可以交給Web?Worker在后臺運行,那么頁面在Javascript運行期間依然可以響應用戶操作。后臺會啟動一個worker線程來執行這段代碼,用戶可以創建多個worker線程

所以你可以在前臺做一些小規模分布式計算之類的工作,不過Web?Worker有以下一些使用限制:

Web?Worker無法訪問DOM節點;

Web?Worker無法訪問全局變量或是全局函數;

Web?Worker無法調用alert()或者confirm之類的函數;

Web?Worker無法訪問window、document之類的瀏覽器全局變量;

不過Web?Worker中的Javascript依然可以使用setTimeout(),setInterval()之類的函數,也可以使用XMLHttpRequest對象來做Ajax通信。

2、專用線程dedicated web worker,以及共享線程shared web worker

Dedicated?web?worker隨當前頁面的關閉而結束;這意味著Dedicated?web?worker只能被創建它的頁面訪問。

Shared?web?worker可以被多個頁面訪問。在Javascript代碼中,“Work”類型代表Dedicated?web?worker,而“SharedWorker”類型代表Shared?web?worker。

在絕大多數情況下,使用Dedicated?web?worker就足夠了,因為一般來說在web?worker中運行的代碼是專為當前頁面服務的。

而在一些特定情況下,web?worker可能運行的是更為普遍性的代碼,可以為多個頁面服務。在這種情況下,我們會創建一個共享線程的Shared?web?worker,它可以被與之相關聯的多個頁面訪問,只有當所有關聯的的頁面都關閉的時候,該Shared?web?worker才會結束。相對Dedicated?web?worker,shared?web?worker稍微復雜些。

3、Web Worker使用XMLHttpRequest與服務端通信

有些情況下,web?worker還需要與服務器進行交互。比如頁面可能需要處理來自數據庫中的信息,我們就需要使用Ajax技術與服務器交互。

4、通過Error事件捕捉錯誤信息

當我們把越來越復雜的邏輯加到Web?Worker里時,錯誤處理機制是必不可少的。而Web?Worker恰恰提供了error事件,供開發者捕捉錯誤信息。

Worker對象可以綁定error事件;而且evt對象中包含錯誤所在的代碼文件(evt.filename)、錯誤所在的代碼行數(evt.lineno)、以及錯誤信息(evt.message)。

5、通過terminate()方法終止Web Worker

有些情況下,我們可能需要強制終止執行中的Web?Worker。Worker對象提供了terminate()來終止自身執行任務,被終止的Worker對象不能被重啟或重用,我們只能新建另一個Worker實例來執行新的任務。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 最近在閱讀這本Nicholas C.Zakas(javascript高級程序設計作者)寫的最佳實踐、性能優化類的書...
    undefinedR閱讀 2,173評論 0 30
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,432評論 25 708
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,370評論 11 349
  • 《洞察力的秘密》拆頁1 P148 有三種獲得洞察力的通路。第一條:通過矛盾來得到洞察。第二條:通過有關聯的新信息來...
    海紅米花媽閱讀 188評論 0 0
  • 作者:阿少 注:本文為作家阿少原創首發,拒絕轉載,文責自負 云煙舒卷,光陰迢遞,有人說有一種愛叫相濡以沫,...
    阿少J閱讀 880評論 1 21