Web Worker的用例是什么?[关闭]


174

我正在寻找使用Web Workers API的真实场景。


它们受移动/ Webkit平台支持吗?
dmp 2010年

不确定,但是会猜到。
谢尔盖·伊林斯基

6
@danp浏览器支持:caniuse.com/webworkers
Dheeraj Vepakomma

1
我写了一个案例,我们首先使用网络工作者,然后确定没有它,情况会更好-windward.net/blogs/web-workers-abandon/#.Vl3QdXarQ-U
David Thielen

Answers:


143
  • jQuery名望的John Resig有很多在这里使用网络工作者的有趣示例 -游戏,图形,加密。

  • 另一个用途是Web I / O-换句话说,在后台轮询URL。这样,您就不会阻止UI等待轮询结果。

  • 另一个实际用途:贝斯平,他们正在使用Web工人做语法高亮,你不会想阻止你的代码编辑,而你正在使用的应用。

  • 来自Mozilla:工作人员有用的一种方法是允许您的代码执行处理器密集型计算,而不会阻塞用户界面线程。

    举一个实际的例子,考虑一个具有#大表的应用程序(这是真实世界,BTW-取自我2年前编写的应用程序)。您可以通过输入字段在表中更改一个#,然后在相当密集的过程中重新计算不同列中的其他数字。

    旧的工作流程是:更改#。在我优化它使其适应后,JavaScript在处理其他数字变化时急需咖啡,而网页在3分钟内无响应。回来喝咖啡。更改第二个#。重复很多次。单击保存按钮。

    与工作人员一起使用的新工作流程可能是:更改#。收到一条状态消息,指出正在重新计算某些内容,但是您可以更改其他编号。更改更多#s。完成更改后,请等待状态更改为“所有计算完成,您现在可以查看最终的#s并保存”。


5
大链接!我从未听说过工人……嗯,工人。(是时候洗个热水澡了……)
彼得·罗威尔

51
我知道这是一个有两年历史的答案,但是我只是想提一下,您不需要项目2(轮询URL)的Web Worker。XHR异步发生并且不会阻塞;无需在单独的线程上运行XHR请求。(当然,在现代应用中,您希望使用WebSockets而不是轮询。)
josh3736 2012年

6
@ josh3736-您是正确的,但我现在很好奇,是否执行许多并行XHR aync请求会以某种方式使浏览器感到不满意?另外,您可能需要本地资源来处理XHR响应,而工作人员可能会有用。
DVK 2012年

如果所有并行请求都发送到同一服务器,则将达到每个主机名限制在2到9个并发连接之间。(我假设该限制适用于所有连接,无论是从主线程还是从工作线程启动的。)当然,如果您一次运行10个并发请求,则可能需要重新考虑应用程序的设计。
josh3736 2012年

2
打扰一下我的简单问题,但是在上面的示例中,您指的是“#”是什么?
shrewdbeans

35

我已使用它们将大量数据从浏览器发送到服务器。显然,您可以通过常规的AJAX调用来完成此操作,但是如果这占用了每个主机名的宝贵连接之一。另外,如果用户在此过程中进行了页面转换(例如,单击链接),则上一页中的JavaScript对象将消失,并且您将无法处理回调。当使用网络工作者时,此活动会带外发生,因此您可以更好地保证它会完成。


2
但是您必须与网络工作者交换消息。什么时候该操作的成本值得受益?
Danielo515 '18

6

另一个用例:

如果您有大量图像和其他媒体文件以压缩格式从服务器交换,则在后台压缩/解压缩文件。


39
这不应该在JavaScript中发生。使用旨在有效压缩图像数据的算法对图像进行压缩(PNG,JPEG)。在顶部加上另一层压缩实际上会增加数据的大小。对于其他类型的数据(例如,较大的JSON文件),应由浏览器使用标准HTTP gzip压缩处理压缩。 如果您使用JavaScript进行压缩,则可能做错了
josh3736

11
我看到一些用户取消了用例的资格,但这是我的意思。考虑一下像MS word这样的应用程序,例如功能强大的文档编辑器,您可以通过它将图像,音乐文件,数据,excel表格等嵌入一个文件中。并假设您有一个基于Web的客户端,一个桌面客户端和一个IOS / Android客户端。对于这种用例,您可以将所有文件内容存储在一个zip文件中,然后在每个客户端上解压缩。
2013年

3
Instapaper小书签会先压缩要保存的页面,然后再将其发送到服务器。节省时间和带宽。
stevendaniels

12
@ josh3736浏览器唯一能做的是从Web服务器(或浏览器缓存)中压缩文件。它无法从本地存储或Websocket解压缩数据,也无法压缩。Web应用程序正在向上游发送越来越多的数据,对此进行压缩非常有用。在一年前发布时同样有效:如果您无法想到任何有效的JavaScript压缩用例,则可能缺乏想象力。
阿德里亚(Adria)2013年

1
@Adria:websocket标准正在添加压缩支持。如果要处理在浏览器(<canvas>)中生成的图像,则可以压缩格式(即png)获取图像数据。我的意思不是说在JS中进行压缩永远是不合适的。我的观点是,在大多数情况下不是这样,并且在大多数情况下(尤其是处理图像,这正是该答案所要解决的问题),还有一种更好的替代方法来实现自己的压缩。
josh3736 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.