美文网首页
web worker接触一下

web worker接触一下

作者: Atlas_lili | 来源:发表于2019-05-25 17:00 被阅读0次

对于小球运动的场景题,后来在掘金看到了系统的答法(链表树、web worker ...)。别人说webworker是应该了解的,但是我之前没接触过,了解一下吧。

什么是web worker

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。
web worker 是运行在后台的 js线程,不似js主线程与渲染引擎公用。Worker 线程一旦新建成功,就会始终运行,这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。
兼容性上IE之外的浏览器都支持!

检测 Web Worker 支持

官网给出的方法。

if(typeof Worker !=="undefined") {
  // Yes! Web worker support!
  // Some code.....
} else {
  // Sorry! No Web Worker support..
}

实际上,要用一个变量存放 Worker 线程对象还需要判断它是不是正存放一个Worker线程对象。

if(typeof Worker !=="undefined") {
  // Yes! Web worker support!
  if(!myworker instanceof Worker ){
    // You can new a Web Worker!
  }
} else {
  // Sorry! No Web Worker support..
}
创建 web worker 文件

创建一个js文件,用于载入worker线程

var data=10;

self.onmessage = function(e){
  console.log(e);
  for(i=0;i<data;i++){
    console.log('worker: '+i);
    //计算的代码
  }
  postMessage(data);
}
开启worker线程

在主线程开启woker线程

var worker = new Worker('子线程文件名.js'),
worker.postMessage(i);
worker.onmessage = function(e){
  console.log(e.data);
}

两次看见了postMessage和onmessage ,postMessage用于向一端发送数据,onmessage用于在另一端监听数据。不巧的是,一番尝试,主线程先发,子线程只能在监听里回复,像一个请求响应一样。可能这就是主线程是主线程吧。

终止worker线程
worker.terminate();
注意事项

(1)同源限制
分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。
(2)DOM 限制
Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用documentwindowparent这些对象。但是,Worker 线程可以navigator对象和location对象,还有自己作用域的self对象。
(3)通信联系
Worker 线程和主线程不在同一个上下文环境,它们不能直接通信,必须通过消息完成。
(4)脚本限制
Worker 线程不能执行alert()方法和confirm()方法,但可以使用 XMLHttpRequest对象发出 AJAX 请求。
(5)文件限制
Worker 线程无法读取本地文件,即不能打开本机的文件系统(file://),它所加载的脚本,必须来自网络。

相关文章

  • web worker接触一下

    对于小球运动的场景题,后来在掘金看到了系统的答法(链表树、web worker ...)。别人说webworker...

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

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

  • Javascript:Web Worker基础

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

  • Service Worker

    上回研究Web Worker时偶然看到了Service Worker(后文简称sw),这次来学习一下。 Servi...

  • 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/beyqzqtx.html