Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行;Web Worker的基本原理就是在当前javascript的主线程中,使用Worker类加载一个javascript文件来开辟一个新的线程,起到互不阻塞执行的效果
1.如何使用Worker呢?
首先,我们要知道,Worker提供的接口有哪些:
(1)主线程和新线程之间数据交换的接口:postMessage,onmessage。
实例对象worker.onmessage(function(e){});worker.postMessage(data);
全局方法onmessage = function(e){};postMessage(data);
到底怎么使用呢?光说不练,就是混蛋,例子如下:
//worker.js onmessage =function (evt){ var d = evt.data;//通过evt.data获得发送来的数据
comsole.log(d); postMessage( "你好,主线程" );//将获取到的数据发送会主线程 }
在html页面中:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <script type="text/javascript"> //WEB页主线程 var worker =new Worker("worker.js"); // 创建一个Worker对象并向它传递将在新线程中执行的脚本的URL,就是上边的worker.js。 worker.postMessage("你好,子线程"); // 向worker发送数据 worker.onmessage =function(evt){ // 接收worker传过来的数据函数 console.log(evt.data); // 输出worker发送来的数据 } </script> </head> <body></body> </html>
WEB主线程:
1.通过 worker = new Worker( url ) 加载一个JS文件(即子线程)来创建一个worker,同时返回一个worker实例。
2.通过worker.postMessage( data ) 方法来向worker发送数据。
3.绑定worker.onmessage方法来接收worker发送过来的数据。
4.可以使用 worker.terminate() 来终止一个worker的执行。
worker子线程:
1.通过postMessage( data ) 方法来向主线程发送数据。
2.绑定onmessage方法来接收主线程发送过来的数据。