趁着夜深人静的时候探了一下worker,那么什么是worker呢?Worker是一种异步执行js的方式。字面意思是工人。大家都知道js有一个单线程的基本特点,就是从上到下依次执行:比如一个浏览器不能同时运行两个事件处理程序,也不能在一个事件处理程序运行时被触发。一个计时器。单线程设计背后的基本原理是客户端JavaScript函数不能运行太长时间:否则会导致循环事件,Web浏览器将无法响应用户。这就是为什么ajaxAPI是异步的,以及为什么客户端JavaScript不能使用简单的异步load()函数或require()函数来加载JavaScript库的原因。创建一个工人varworker=newWorker("index.js");worker是副线程,那么怎么和主线程通信呢?worker()上有个postMessage方法varnum=1000;varworker=newWorker("index.js");worker.postMessage(num);同域下的index.js中可以收到这样的数据this.onmessage=function(e){console.log(e);}打印结果:worker的缺点worker文件必须和主文件满足同源策略并且受到主线程DOM的限制,也就是说主线程中的dom在worker结构中是获取不到的。工作线程和主线程不在同一个上下文中,不能直接通信,必须通过消息来完成。也就是说:使用postMessage()方法发送消息,使用onmessage事件接收消息。主线程中的窗口与工作线程中的窗口无关。worker中没有window脚本限制:worker线程不能执行alert或者confirm方法(alert在window上,worker上没有window,自然没有alert),但是ajax请求可以使用XMLHTTPRequest对象创建。受文件限制:worker线程无法读取本地文件,即无法打开本地文件系统,其加载的脚本必须来自于networkworker与主线程的通信1,postMessage(n)方法2,onmessage()eventEndworker由于老板让员工工作,如果工作不好,老板可以解雇他。其他特点1、worker只是window的一个子集,只能实现部分功能,不能获取window和document,所以这里不引用jqueryzepto。可以引入一些计算类的库。worker对象上定义的最有趣的全局函数是importScript():worker使用此方法加载任何所需的代码库。如下://开始工作前加载需要的类和工具函数importScript("math.js","map.js","set.js");importScript()方法可以接受一个或多个url参数,每个url指向一个JavaScript代码文件。2.scopeglobalWorkerScopechrom浏览器暂时不支持在通过Worker()构造函数创建新Worker时指定JavaScript代码文件的url。代码将在一个新的JavaScript运行时环境中运行,与主线程的环境隔离开来。globalWorkerScope全局对象表示worker的新运行环境。globalWorkerScope对象比核心JavaScript全局对象稍大,但比整个客户端窗口对象小。postMessage跨域指的是window上的跨域window。postMessage主要用于iframe子页面向父页面传递数据
