`
yanzhihong23
  • 浏览: 59185 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Web Workers 网页工人线程

 
阅读更多

 

自JavaScript 诞生以来,还没有办法在浏览器 UI线程之外运行代码。网页工人线程API 改变了这种状

况,它引入一个接口,使代码运行而不占用浏览器UI线程的时间。作为最初的HTML 5 的一部分,网页

工人线程API 已经分离出去成为独立的规范(http://www.w3.org/TR/workers/ )。

 

网页工人线程对网页应用来说是一个潜在的巨大性能提升,因为新的工人线程在自己的线程中运行

JavaScript。这意味着,工人线程中的代码运行不仅不会影响浏览器 UI,而且也不会影响其它工人线程中

运行的代码。

由于网页工人线程不绑定 UI线程,这也意味着它们将不能访问许多浏览器资源。工人线程的运行环境由下列部分组成:

一个浏览器对象,只包含四个属性:appName, appVersion, userAgent, 和platform 

一个location 对象(和window里的一样,只是所有属性都是只读的)

一个self 对象指向全局工人线程对象

一个importScripts()方法,使工人线程可以加载外部JavaScript 文件

所有ECMAScript对象,诸如 Object,Array,Data ,等等

XMLHttpRequest 构造器 

setTimeout() 和setInterval() 方法

close() 方法可立即停止工人线程 

 

 

因为网页工人线程有不同的全局运行环境,你不能在 JavaScript 代码中创建。事实上,你需要创建一个

完全独立的JavaScript 文件,包含那些在工人线程中运行的代码。要创建网页工人线程,你必须传入这个

JavaScript 文件的 URL : 

 

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

 此代码一旦执行,将为指定文件创建一个新线程和一个新的工人线程运行环境。此文件被异步下载,直

 

到下载并运行完之后才启动工人线程。

工人线程和网页代码通过postMessage和onmessage事件接口进行交互。例如:

 

var worker = new Worker("code.js"); 
worker.onmessage = function(event){ 
   alert(event.data); 
}; 
worker.postMessage("Nicholas"); 

 

 

 

  //inside code.js 
self.onmessage = function(event){ 
   self.postMessage("Hello, " + event.data + "!"); 
};  

 

 

 

当工人线程通过 importScripts()方法加载外部 JavaScript 文件,它接收一个或多个 URL 参数,指出要加

的JavaScript 文件网址。工人线程以阻塞方式调用 importScripts(),直到所有文件加载完成并执行之后,

本才继续运行。由于工人线程在UI线程之外运行,这种阻塞不会影响UI响应。例如: 

 

//inside code.js 
importScripts("file1.js", "file2.js"); 
self.onmessage = function(event){ 
   self.postMessage("Hello, " + event.data + "!"); 
}; 

 

 

 

网页工人线程适合于那些纯数据的,或者与浏览器 UI没关系的长运行脚本。例如:

解析一个大字符串

编/解码一个大字符串

复杂数字运算

给一个大数组排序

......

 

 

任何超过 100 毫秒的处理,都应当考虑工人线程方案是不是比基于定时器的方案更合适。当然,还要基

于浏览器是否支持工人线程。

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    elm-webworker:用于生成和与 Web Workers 通信的简单库(bitrotted)

    Web Workers 是一种 JavaScript 技术,它允许在后台线程中执行脚本,以提高 web 应用程序的性能和响应速度。特别是在处理大量计算任务时,如图像处理、加密或大数据分析,Web Workers 可以避免阻塞主线程,从而保持...

    comlink:Comlink使WebWorkers变得愉快

    康联 Comlink使变得愉快。... WebWorkers是一个Web API,允许您在单独的线程中运行代码。 为了与另一个线程通信,WebWorkers提供了postMessage API。 您可以使用myWorker.postMessage(someObject)将

    前端开源库-workers-factory-rebuild

    总的来说,"Workers-Factory Rebuild" 是一个强大的工具,通过其工人工厂和重建机制,它极大地简化了 Web Workers 的使用,提升了前端应用的性能,为开发者提供了更高效的开发体验。对于那些追求极致性能和用户体验...

    workers-playground:和工人一起玩

    Web Workers是HTML5引入的一个特性,允许在浏览器后台线程中执行脚本,提高了网页应用的并行处理能力,从而避免了主线程(如UI渲染)因执行耗时操作而阻塞。 Web Workers的主要知识点包括: 1. **创建与通信**:...

    react-hooks-worker:为Web WorkerReact自定义钩子

    React钩工人 为Web WorkerReact自定义钩子。 介绍 Web Worker是浏览器中主线程中的另一个线程。 我们可以在单独的线程中运行繁重的计算,因此用户不会感到速度变慢。 React提供了一个React系统。 这个库通过React...

    wasm-worker:将WebAssembly模块移到其自己的线程中

    工人 将WebAssembly模块移到其自己的线程中wasm-worker由于使用 ,因此仅支持浏览器环境。 为了在NodeJS环境中使用,必须使用诸如类的库对Web Workers进行。安装您可以使用安装wasm-worker: npm install --save ...

    yabeda-puma-plugin:从puma控制面板收集Puma Web服务器指标

    puma_workers正在运行的美洲狮工人数 puma_booted_workers已启动的彪马工人数 puma_old_workers美洲狮老工人数 按工作人员细分(工作人员的索引): puma_pool_capacity每个工作人员的容量:服务器现在能够处理的...

    html5 app 模板

    7. **Web Workers**:Web Workers允许在后台线程中执行耗时计算,避免阻塞主线程,提升应用性能。 8. **WebSockets**:提供了全双工的通信通道,使实时通信如聊天、游戏等应用成为可能。 9. **WebSocket与Server-...

    工人头盔

    在"worker-helmet-main"这个文件名中,"worker"可能指的是Web Workers,这是一种允许Web应用程序在后台线程中运行脚本的技术,以实现多线程处理,提高性能,特别是在处理大量计算或I/O操作时。"Helmet"通常在Web安全...

    pseudo-worker:一个很小且基本符合规范的WebWorker polyfill

    它在主线程上运行,因此您不会获得WebWorkers的任何多线程好处。 但是,对于不太兼容的浏览器,它应该“足够好”。 束尺寸很小:1KB后丑化+ gzip的!安装npm install pseudo-worker用法var PseudoWorker = require ...

    worka:网络工作者产生承诺

    平台类Web,迪诺为什么与Web Workers一起工作很有趣,因为它使以前只能用于本机软件的内容也可以在Web上使用。 但是多线程很难正确处理,这就是为什么我使用模式来保持正确。 这些模式先前已在不同的Web应用程序中...

    modulo-worker:模块作业系统的工人

    在这个系统中,"工人"(worker)通常指的是在后台运行的线程,它们负责处理计算密集型或耗时的任务,以避免阻塞主线程,提高应用性能。 在JavaScript环境中,由于单线程的限制,大型计算任务可能会导致浏览器界面...

    syncedReturn:在DCP上运行的联合学习算法,所有工人都可以同时返回,而无论他们接受了多少培训

    - **Web Workers**:为了在浏览器环境中并行计算,可以利用Web Workers将计算任务分配到多个线程,提高性能。 - **通信协议**:由于设备间需要交换模型权重,可能需要建立一个可靠的通信协议,如WebSocket,用于...

Global site tag (gtag.js) - Google Analytics