美文网首页
关于Web Worker

关于Web Worker

作者: 梧桐芊雨 | 来源:发表于2019-01-20 22:08 被阅读0次

简介

javascript在执行时是采用单线程执行的,即所有任务只能在一个线程上完成。但为了实现对浏览器多线程支持,html5提供web worker 创建多线程,但该线程受主线程控制,且子线程不能操作DOM,只有才能主线程可以操作DOM。

一、web worker:

是指在Javascript单线程执行的基础上,开启一个子线程,进行程序处理,而不影响主线程的执行,当子线程执行完毕之后再回到主线程上,在这个过程中并不影响主线程的执行过程。

二、web worker线程常见的方法:

1,创建新worker线程

var worker=new Worker("worker.js");//方法一
 var worker=new Worker(blob);//方法二

以上两个都是创建worker线程, 传入参数是文件资源或Blob对象(blob对象代表原始二进制数据)

2,线程间通信---postMessage(data)(发送)

worker.postMessage('index:123455');//方法一 
worker.postMessage({method: 'echo', args: ['Work']});//方法二

主线程若要向worker线程发消息,可以使用postMessage方法实现。它发送的参数可以是各种数据类型包括二进制

3,线程间通信---onMessage(接收、监听)

worker.addEventListener("message",target);//方法一
worker.onmessage=function (e) {//方法二
console.log('啊哈:--'+e.data);
}

主线程通过该方法监听并接收子线程发回来消息。

4、异常处理--error

worker.onerror = function(e){
console.log("error at "+e.filename ":" + e.lineno + e.message)
}

监听worker线程若发生错误,则触发该事件

5、关闭worker线程

// 主线程
worker.terminate();
// Worker 线程
self.close();

当使用完后使用该命令可以关闭worker。worker内部可以监听error事件。

6、导入脚本方法importScripts(urls)
此方法是worker的核心方法。该方法可用于导入一个或多个JavaScript脚本.例如importScripts("a.js","b.js","c.js");

7、sessionStorage/localStorage:完全可在worker线程中使用Strorage来执行本地存储

8、异步请求XMLHttpRequest
Worker线程中可以使用XMLHttpRequest来发送yibu

若上面的仍然不明白,那就动手复制下面代码运行下估计就明白了。

  • 创建index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>worker通信</title>
</head>
<body>
<script>
    //创建新worker(子线程)
    var worker=new Worker("worker.js");
    /**主线程和子线程数据相互传送用以下方法
     *1. postMessage(data);(发送数据)
     * data:发送消息,提交data;
     * 2.onmessage():(接收数据)
     * 事件监听属性,通过该属性指定函数可以获取前台JavaScript脚本提交的数据;
     */
    worker.postMessage('index:123455');
    worker.onmessage=function (e) {
        console.log('啊哈:--'+e.data);//打印结果:啊哈:--worker:worker发出的
    }
</script>
</body>
</html>
  • 创建woker.js
onmessage=function (e) {

console.log('worker:--'+e.data);//打印结果:worker:--index:123455

postMessage('worker:worker发出的');

}

运行结果


worker.png

三、web worker线程类型:

web worker线程类型分两种: 专用线程和共享线程。

1.专用线程Dedicated Worker

1.专用线程创建

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

sharedworker中的参数是提供一个javascript脚本文件的URL地址或Blob.

2共享线程--onmessage(监听,结接收)

worker.port.onmessage = function(e){
    ...
}

共享线程也使用onmessage 事件监听线程消息,但使用SharedWorker对象的port属性与线程通信,接收data。

3共享线程--postMessage(data)发送

worker.port.postMessage("message");

使用SharedWorker对象的port属性向共享线程发送消息

2.共享线程Shared Worker

共享线程:为了避免线程重复创建和销毁过程,降低系统性能的消耗,共享线程可以同时有多个页面的线程链接。
1.共享线程创建

var worker = new SharedWorker("sharedworker.js");

sharedworker中的参数是提供一个javascript脚本文件的URL地址或Blob.

2共享线程--onmessage(监听,结接收)

worker.port.onmessage = function(e){
    ...
}

共享线程也使用onmessage 事件监听线程消息,但使用SharedWorker对象的port属性与线程通信,接收data。

3共享线程--postMessage(data)发送

worker.port.postMessage("message");

使用SharedWorker对象的port属性向共享线程发送消息

参考文档
web worker介绍
https://www.xiangzongliang.com/blogContent?b=82#2、Web Worker

阮一峰web worker:
http://www.ruanyifeng.com/blog/2018/07/web-worker.html

web worker介绍
https://www.ibm.com/developerworks/cn/web/1112_sunch_webworker/

web worker详解
https://segmentfault.com/a/1190000012528806

JavaScript运行机制详解:Event Loop
http://www.ruanyifeng.com/blog/2014/10/event-loop.html

相关文章

  • 关于Web Worker

    Web Worker Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 ...

  • 关于Web Worker

    简介 javascript在执行时是采用单线程执行的,即所有任务只能在一个线程上完成。但为了实现对浏览器多线程支持...

  • web worker 处理多文件并行上传

    一 web worker: 什么是web worker Web Worker为Web内容在后台线程中运行脚本提供...

  • Javascript:Web Worker基础

    参考资料Web Workersweb worker详解Blob对象 Web Worker分为专属Worker(De...

  • web worker

    web Worker web Worker 文件单独写在一个文件中,在main worker 中 执行的文件里使用...

  • Web Worker

    一、Web Worker 1. Web Worker是 运行在后台的javascript,也就是说worker其实...

  • 为你写的网页“提速”---Web Worker

    认识Web Worker Web Worker是 运行在后台的javascript,也就是说worker其实就是就...

  • Web Worker

    什么是Web Worker? Web Worker是 运行在后台的javascript,也就是说worker其实就...

  • NFH.009 - Web Worker与Web Socket

    12.22学习经验分享# Bruce_Zhu于2016.12.23 一、Web Worker Web Worker...

  • service worker

    Service Worker是继web Worker后又一个新的线程,这个线程比web worker独立得更彻底,...

网友评论

      本文标题:关于Web Worker

      本文链接:https://www.haomeiwen.com/subject/prbfjqtx.html