问题标签 [web-worker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
16595 浏览

javascript - “未捕获的错误:DATA_CLONE_ERR:DOM 异常 25”由网络工作者抛出

所以我正在创建一个网络工作者:

这是图像:

我认为我的问题与此有关:

http://dev.w3.org/html5/spec/Overview.html#safe-passing-of-structured-data

我怎样才能解决这个问题?如您所见,我尝试将主机对象切片成一个真正的数组,但这没有用。

这是我正在破解的文件的链接:

https://github.com/jtmkrueger/JAIL

更新 - - - - - - - - - - - - - - - - - - - - - - - - - -

根据@davin 接受的答案,这是我必须做的:

注意:我使用 underscore.js 来确保兼容性。

0 投票
5 回答
3332 浏览

javascript - 检测 JavaScript 是否作为 WebWorker 执行的任何标准机制?

WebWorker 的执行范围与传统 JavaScript 的“窗口”上下文完全分离。脚本是否有标准方法来确定它本身是否作为 WebWorker 执行?

我能想到的第一个“黑客”是检测工人范围内是否存在“窗口”属性。如果不存在,这可能意味着我们正在作为 WebWorker 执行。

其他选项是检测标准“窗口”上下文中不存在的属性。对于 Chrome 14,此列表当前包括:

检测 WorkerLocation 似乎是一个可行的候选者,但这仍然感觉有点骇人听闻。有没有更好的办法?

编辑:是我用来确定正在执行的 WebWorker 中存在的属性的 JSFiddle,这些属性现在位于“窗口”中。

0 投票
3 回答
10371 浏览

javascript - 为什么在 2.2 及更高版本中从 Android 浏览器中删除了对 HTML5 Web Workers 的支持?

我正在尝试学习有关 JavaScript 线程的知识。从一个教程中我了解了 HTML5 API web worker。此 API 启用 JavaScript 多线程。所以我开始弄清楚如何以及在哪里可以使用此功能。

表格http://caniuse.com/#search=worker

我发现这个 API 仅在较低版本的 Android 浏览器中受支持。它在 Android 2.2 及更高版本中不可用。

这个结果正确吗?如果是,是不是出于性能考虑?

此 API 将在哪个版本上可用?

0 投票
5 回答
22108 浏览

javascript - JavaScript 多线程

我正在比较几种在 JavaScript 中实现(真实或虚假)多线程的不同方法。据我所知,只有 webworkers 和 Google Gears WorkerPool 可以为您提供真正的线程(即分布在具有真正并行执行的多个处理器上)。我找到了以下方法:

  • 在任务之间切换使用yield()

  • 使用setInterval()(或其他非阻塞函数)与线程等待另一个

  • 使用 Google Gears WorkerPool 线程(带有插件)

  • 使用 html5 网络工作者

我阅读了相关问题并发现了上述方法的几种变体,但大多数问题都是旧的,因此可能会有一些新想法。

我想知道 - 你还能如何在 JavaScript 中实现多线程?还有什么重要的方法吗?

更新:正如评论中指出的,我真正的意思是并发。

更新 2:我发现 Silverlight + JScript 支持多线程的信息,但我无法验证这一点。

更新 3: Google 已弃用 Gears:http ://code.google.com/apis/gears/api_workerpool.html

0 投票
8 回答
51288 浏览

javascript - 将对象传递给网络工作者

我正在尝试通过 postMessage 函数将对象传递给网络工作者。
这个对象是一个正方形,有几个功能可以在画布和其他东西上绘制自己。web worker 必须返回这个对象的数组。
问题是当我用这个对象调用 postMessage 函数时,我得到一个错误:

我把这个对象发送给工人,反之亦然。
我认为错误是因为 javascript 必须序列化对象,但不能这样做,因为对象具有内置函数。

有没有人遇到过类似的问题?你知道一些解决方法吗?
提前致谢。

0 投票
1 回答
504 浏览

javascript - 将 REST 请求中的大数据 JSON 反序列化为对象而不锁定浏览器?

在富互联网应用程序中:

  1. 用户请求资源
  2. 服务器以巨大的JSON 响应响应
  3. 客户端(在浏览器中运行)必须处理 JSON,将其转换为构成应用程序状态的许多对象。

第 3 步是密集的,可能会导致浏览器锁定。我正在考虑使用网络工作者,但我认为他们可能不适合这项任务。

据我了解工作人员,他们纯粹以文本或 JSON 的形式传递消息。因此,虽然 web worker 可以接受消息(“请在此 URL 获取资源”),但 worker 可以检索大型 JSON 响应,甚至将其反序列化为构成应用程序状态的许多对象,但是将无法通过消息传递构造将对象(各种类的实例)传递回主进程。正确的?还是我错过了什么?

如何允许浏览器内的客户端在不影响用户体验(锁定浏览器)的情况下将大数据反序列化为对象?如果网络工作者不在,那是否会使用计时器(用于时间切片)?

0 投票
1 回答
279 浏览

javascript - 评估函数

我正在尝试创建一个小型库,您可以发送一个对象(具有函数)和一些数据和参数,它会将对象、数据和参数发送给一个工作进程,然后该工作进程将评估对象以重建函数(从字符串到函数)

目前我有这个:

JSON.stringify(object, function(key, val) { if typeof val === 'function' { return val + '' } return val });

此函数将对包括函数的对象进行字符串化。

在我的工作人员中,我试图撤消这个过程。

我尝试了以下方法: eval(object) 我还尝试实现 JSON.parse,并在遇到一个函数时尝试 eval() 每个函数。

我也试过eval("return " + object.function)

这可能吗?

0 投票
2 回答
552 浏览

jquery - 在 Web Worker 中将 JSON 转换为 Asp.Net。在Controller中找不到方法

我正在向 Web Worker 内部的 Asp.Net MVC 3 控制器发送一个 JSon(使用 jquery-hive)。在 PostMessage 中,我可以捕获一个 Asp.Net 错误,告诉我它找到了控制器但没有操作方法 X。

查看代码:这里我在 main.js 调用 Worker:

worker.js 中的代码:

控制器有这个方法:

工人给我回的posMessage,是asp.net的错误。

[HttpException]:在控制器 SearchController 上找不到公共操作方法“Method1”

0 投票
8 回答
3385 浏览

javascript - 使我的浏览器变慢的 Javascript 代码

我正在为 WebWorkers 编写一个库,我想测试在主页线程中运行脚本与在一个或多个工作人员中运行脚本之间的区别。问题是:我无法找到一个简短的函数,它会使我的浏览器足够紧张,以至于我可以观察到差异。

快速搜索并没有返回太多,但可能只是我真的不知道要搜索什么;通常我会尝试优化我的代码,而不是让它变慢......

我正在寻找可以在纯 Javascript 中轻松实现的算法或模式,它们不依赖于 DOM 或 XHR,并且可以传递一个参数来限制或指定计算的范围(没有无限算法);1 秒 < 平均时间 < 10 秒。

如果它可以在没有递归的情况下构建,并且如果它不会导致显着的内存占用,同时仍然尽可能地占用处理器资源,则可以加分。

0 投票
3 回答
7276 浏览

html - 从 Web Worker 内部使用 WebGL:可能吗?如何?

我打开了这个矩阵乘法基准测试,我的浏览器(Firefox 7.0.1)冻结了,直到基准测试完成(我在旧的 Asus EeePC 1000H 中打开了页面)。

我听说 Web Worker 的发明是为了将处理与显示网页分开。是否有可能利用 Web Workers API 使 WebGL 不会停止整个 Web 浏览器?