趁着夜深人静睡不着来探究探究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); }
打印结果:网络
worker的缺点dom
worker和主线程之间的通讯异步
一、postMessage(n)方法函数
二、onmessage()事件工具
结束worker
既然主人叫工人干活,要是活干很差,主人能够辞退他
其余的特性
一、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子页面传递数据给父页面