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子页面传递数据给父页面

相关文章
相关标签/搜索