程序的性能问题

Web Worker

web worker是HTML5 的一个新增特性,能够支持程序进行多线程的运行都是浏览器的功能,和JavaScript本身并没有什么太大的关系,js当前并没有任何支持多线程的功能。

但是在浏览器这样的环境里,很容易提供多个 JavaScript 引擎实例,各自运行在自己 的线程上,这样你可以在每个线程上运行不同的程序。程序中每一个这样的独立的多线程 部分被称为一个(Web)Worker。这种类型的并行化被称为任务并行,因为其重点在于把 程序划分为多个块来并发运行。

首先实例化一个worker:

var w1 = new Worker( "http://some.url.1/mycoolworker.js" );

 

这个 URL 应该指向一个 JavaScript 文件的位置(而不是一个 HTML 页面!),这个文件将 被加载到一个 Worker 中。然后浏览器启动一个独立的线程,让这个文件在这个线程中作 为独立的程序运行。

这种通过这样的 URL 创建的 Worker 称为专用 Worker(Dedicated Worker)。 除了提供一个指向外部文件的 URL,你还可以通过提供一个 Blob URL(另 外一个 HTML5 特性)创建一个在线 Worker(Inline Worker),本质上就是一 个存储在单个(二进制)值中的在线文件。不过,Blob 已经超出了我们这里 的讨论范围。

Worker 之间以及它们和主程序之间,不会共享任何作用域或资源,那会把所有多线程编程 的噩梦带到前端领域,而是通过一个基本的事件消息机制相互联系。 Worker w1 对象是一个事件侦听者和触发者,可以通过订阅它来获得这个 Worker 发出的事 件以及发送事件给这个 Worker。

以下是如何侦听事件(其实就是固定的 "message" 事件):

w1.addEventListener( "message", function(evt){ // evt.data } );

也可以发送 "message" 事件给这个 Worker: w1.postMessage( "something cool to say" );

在这个 Worker 内部,收发消息是完全对称的:

// "mycoolworker.js" addEventListener( "message", function(evt){ // evt.data } );

postMessage( "a really cool reply" );

 

通常由主页面应用程序创建 Worker,但若是需要的话,Worker 也可以实例化它自己的子 Worker,称为 subworker。有时候,把这样的细节委托给一个“主”Worker,由它来创建 其他 Worker 处理部分任务,这样很有用。

 

Web Worker 通常应用于哪些方面呢?

• 处理密集型数学计算 • 大数据集排序 • 数据处理(压缩、音频分析、图像处理等) • 高流量网络通信

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值