美文网首页Web 前端开发 让前端飞
Web Workers Part 1:什么是Web Worker

Web Workers Part 1:什么是Web Worker

作者: butterandfly | 来源:发表于2016-10-28 12:48 被阅读0次

“Web Workers”在WHATWG里已经是LS,被大多数浏览器支持,详细可看caniuse

在讲述Web Workers究竟是什么之前,我们先回头看一下历史遗留问题。

痛点:单线程

浏览器端的javascript属于单线程环境--你不能同时运行多个脚本,也做不到一边运行着复杂运算一边响应着用户的交互事件。
考虑这么一个例子:

我希望用户打开我的Web App后,在正常使用着应用的同时,
偷偷地帮我运行一些耗时很长的破解工作(可能是破解密码或其他)。

先不考虑这个实例是否道德,而实际上传统浏览器也不提供多线程技术让我们实现这种功能。虽然异步、事件机制(如利用setInterval、setTimeout等)在一定程度上能模拟“并行”,但始终不能实现流畅的多线程执行,更别说利用多核CPU。

什么是Web Workers

Web Workers出现的目的就是解决上述的这种单线程。利用Web Workers技术,我们可以在浏览器端实现多线程。Web Workers是:

An API for running scripts in the background independently of any user interface scripts.

Web Workers能帮助你创建独立的、不与页面线程相互影响的域,来执行你的javascript代码。

创建一个Worker

下文会用“window域”指代页面代码所在的作用域。

创建Worker只需要简单的两步,一是注备好你要独立线程执行的代码,二是new一个Worker:

// secret-job.js

while(true) {
  // Do secret jobs.
}
<!-- index.html -->

<script>
let secretWorker = new Worker('secret-job.js');
</script>

上面代码做了:

  • 在window域里创建一个新的Worker,并赋值给secretWorker
  • Worker创建的同时,会创建一个新的DedicatedWorkerGlobalScope
  • 这个DedicatedWorkerGlobalScope是一个与window域完全独立的作用域;这两个作用域下没有任何共同的东西,而且由两个线程分别执行
  • "secret-job.js"的代码会在DedicatedWorkerGlobalScope里执行

就这样,你实现了“使用一个新的线程执行特定的js代码”。

创建一个新的Worker时发生了什么

  • 得到一个Worker实例
  • 创建一个新的WorkerGlobalScope
  • 创建一个新的线程
  • 参数对应的js文件的代码会以WorkerGlobalScope作为context,在这个新的线程里执行

但:

  • WorkerGlobalScope是什么?
  • DedicatedWorkerGlobalScope又是什么?
  • 在WorkerGlobalScope下为什么很多东西如window、document都拿不到?

这些东西我会在以后说明,而下篇我们要先讨论一个更重要的问题:域(线程)间的通信。

相关文章

  • 初探 HTML5 Web Workers

    原文:初探 HTML5 Web Workers 一、Web Workers是什么 Web Worker为Web内容...

  • Web Workers Part 1:什么是Web Worker

    “Web Workers”在WHATWG里已经是LS,被大多数浏览器支持,详细可看caniuse。 在讲述Web ...

  • HTML Web Workers

    Web Workers是运行在后台的JavaScript,不会影响页面的性能。 什么是Web Worker? 当在...

  • HTML5 之 Web Worker

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

  • H5(Web Workers)

    Web Workers Worker:构造函数,加载分线程执行的js文件 Worker.prototype.onm...

  • Web Workers Part 2: 通信

    这是Web Workers系列文章的第二部分,还没了解Web Workers的同学可以先查看Part 1 你可能会...

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

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

  • web Workers使用

    Web Workers可以让web应用程序具备后台处理能力,使用Worker类加载一个javascript文件来开...

  • 22. 使用 Sources 面板 Threads 调试

    如果您正在使用利用多个线程的JavaScript功能(例如Service Worker或Web Workers),...

  • Web Worker

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

网友评论

    本文标题:Web Workers Part 1:什么是Web Worker

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