worker

趁着夜深人靜睡不着來探究探究worker,那什麼是worker呢?jquery

worker是一種異步執行js的方式。字面意思是工人的意思,你們都知道js有一個基本特性就是單線程,從上到下依次執行:好比瀏覽器沒法同時運行兩個事件處理程序,它也沒法在一個事件處理程序運行的時候觸發一個計時器。之因此設計成單線程的理論是就是,客戶端的JavaScript函數必須不能運行時間太長:不然會致使循環事件,web瀏覽器沒法對用戶做出響應。這也是爲何ajax的API都是異步的,以及爲何客戶端JavaScript不能使用一個簡單的異步load()函數或者require()函數來加載JavaScript庫。web

建立一個workerajax

var worker = new Worker("index.js");

worker是一個輔線程,那怎麼跟主線程通訊呢?worker上有一個postMessage方法()跨域

var num = 1000; 
var worker = new Worker("index.js");
worker.postMessage(num);

在同一個域下index.js裏面能夠這樣接收數據瀏覽器

this.onmessage = function (e){ 
        console.log(e);
}

打印結果:
image.png網絡

worker的缺點dom

  • worker文件必須和主文件知足同源策略
  • 受到主線程DOM的限制,意思就是在worker裏面是拿不到主線程裏面的dom結構的。
  • worker線程和主線程不在同一個上下文環境,它們不能直接通訊,必須經過消息完成。也就是說:用postMessage()方法發送消息,用onmessage事件來接收消息。主線程裏的window和worker裏面的window是沒有關係的,worker裏面是沒有window的
  • 腳本限制:worker線程不能執行alert或者confirm方法(alert是window上的,worker上沒有window,天然也就沒有alert),但可使用XMLHTTPRequest對象發出ajax請求。
  • 受文件限制:worker線程沒法讀取本地文件,即不能打開本機的文件系統,它所加載的腳本必須來自網絡

worker和主線程之間的通訊異步

一、postMessage(n)方法函數

二、onmessage()事件工具

結束worker

image.png

既然主人叫工人幹活,要是活幹很差,主人能夠辭退他

image.png

其餘的特性

一、worker只是window的子集,只能實現部分功能,不能獲取到window、document,因此這裏不要引jquery zepto。能夠引入一些計算類的庫。worker對象上定義最有意思的全局函數是importScript():worker使用此方法來加載任何須要的代碼庫。以下所示:

//在開始工做前先載入須要的類、工具函數 importScript("math.js","map.js","set.js");

importScript()方法能夠接受一個或者多個url參數,每一個url都指向一個JavaScript代碼文件。

二、做用域glob alWorkerScope chrom瀏覽器暫時不支持

在經過Worker()構造函數建立一個新的Worker的時候,指定了包含JavaScript代碼文件的url。該代碼會運行在全新的JavaScript運行環境中,跟主線程的環境隔離開來。globalWorkerScope全局對象表示了該worker新的運行環境。globalWorkerScope對象在某種程度上來講大於核心的JavaScript全局對象,小於整個客戶端的window對象。

postMessage跨域指的是window上的跨域

window.postMessage

主要應用於iframe子頁面傳遞數據給父頁面

相關文章
相關標籤/搜索