美文网首页程序媛
web worker解决javascript单线程问题

web worker解决javascript单线程问题

作者: ZhongQw | 来源:发表于2018-07-15 13:21 被阅读1次

由于js是单线程语言,后来兴起的多核CPU导致单线程使用起来不方便。
所以,html5出来的web worker致力于解决单线程问题。
它相当于是在后台又开了一个线程,但是不影响主线程,这样做的目的是一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。

使用限制

  • 同源

分配给worker的任务必须与主线程是同源的

  • DOM限制

不可以使用document / window / parent对象,但是可以使用navigator / location对象

  • 通信联系

主线程和worker 不能直接联系,必须通过消息传输来进行联系

  • 脚本限制

不可以使用alert / confirm,但是可以使用XMLHttpRequest来发送AJAX请求

  • 文件限制

不能打开本地文件,也不可以读取本地文件,文件必须来自网络


基本使用方法

1、 主线程

  • 新建一个worker线程,并发送数据
   const worker = new Worker(a.js);
   worker.postMessage("hello world");
  • 读取worker返回的数据
    通过worker.onmessage指定一个监听事件
worker.onmessage = function (event) {
     console.log('Received message ' + event.data);
     doSomething();
}

检查worker是否有错误,有错误就会调用主线程的error方法

worker.addEventListener('error', function (event) {
  • 关闭worker
worker.terminate()

2、worker

指定一个监听事件

self.addListerEvent('message',function (e){ //self代表woker的全局 
      e.date       //指主线程传来的数据
      self.postMessage()     //向主线程发送数据
     self.close()       //用于自身关闭
})

可以加载其他脚本,使用importScripts()

importScripts('javascript1.js',('javascript2.js',...)  //可以同时加载一个或多个脚本

相关文章

  • web worker解决javascript单线程问题

    由于js是单线程语言,后来兴起的多核CPU导致单线程使用起来不方便。所以,html5出来的web worker致力...

  • Web Worker简介

    JavaScript采用的是单线程模型,Web Worker的作用就是为JavaScript创造多线程环境。在主线...

  • Web工人?

    Web工人? 众所周知,javascript是单线程语言(为什么)。web worker可以在后台开启浏览器除GU...

  • js的执行机制 Event Loop(事件循环)

    javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线...

  • JS 执行机制

    JS 是一门单线程语言,最新的 HTML5 中提出了 Web-Worker,但 JavaScript 是单线程这一...

  • Web Workers

    web worker JavaScript是单线程的,遇到计算密集型或高延迟的任务时,会影响整个页面的运行。Web...

  • js中的事件循环机制(eventloop)

    前言  众所周知,JavaScript 是一门单线程语言,虽然在 html5 中提出了 Web-Worker ,但...

  • HTML5 之 Web Worker

    HTML5 Web Worker Web Workers 是 HTML5 提供的一个javascript多线程解决...

  • 深入理解JavaScript事件循环机制

    前言 众所周知,JavaScript 是一门单线程语言,虽然在 html5 中提出了 Web-Worker ,但这...

  • 详解JavaScript事件循环机制

    众所周知,JavaScript 是一门单线程语言,虽然在 html5 中提出了 Web-Worker ,但这并未改...

网友评论

    本文标题:web worker解决javascript单线程问题

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