问题标签 [shared-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 投票
1 回答
97 浏览

javascript - 如何检查 OpenFin 中的共享工作者?

当应用程序在 OpenFin 上运行时,我正在寻找一个选项来检查SharedWorker线程以调试和检查控制台日志。

我一直在 chrome 开发人员工具中调试我的基于 javascript react 的应用程序,并且共享工作人员检查可在 chrome://inspect/#workers 访问。但是在 OpenFin 上运行时,我找不到任何检查共享工作者的选项。

有什么建议吗?

0 投票
1 回答
426 浏览

electron - electron:如何在 BrowserWindow 中打开 chrome://inspect 特殊 url 来调试 SharedWorkers

我需要从 SharedWorkers 访问调试信息。在常规的 chrome 窗口中,我会通过打开 chrome://inspect 来做到这一点,但我无法在电子的 BrowserWindow 中实现同样的效果。

我尝试发行

从开发工具控制台,但我得到一个空白窗口,在新窗口中打开开发工具将显示

有什么线索吗?

0 投票
2 回答
208 浏览

javascript - 每次在 Javascript 中使用 fetch() 时,如何执行函数?

每次在我的脚本中发出 HTTP 请求时,我都会尝试向我发布一条消息,sharedWorker以节省我在每次 HTTP 请求后必须手动执行的操作。

我设法让它像这样工作:

当我创建一个new XMLHttpRequest()这工作正常并且该sessionStorage项目是用数据设置的。但是,我不使用XMLHttpRequest,而是使用fetch(). 这似乎并没有创造出XMLHttpRequest我认为的那样。

每次调用 new 时,如何postMessage在 my 上执行该函数?最好是在完成之后。App.__webWorkerfetch()

更新:这是我自己的框架,我使用 Smarty 模板引擎,所以忽略{{}}前缀区域。这就是我从 PHP 将数据导入脚本的方式。

更新:我试图这样做,但我得到Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation

0 投票
1 回答
1434 浏览

javascript - 如何与 SharedWorker 共享数据

网上已经有很多关于 SharedWorker 和 StackOverflow 的讨论和教程,但没有一个真正实现了最基本的目标——直接在两个 SharedWorker 之间传递数据。

对我来说,SharedWorker 相对于专用 web Worker 的优势在于前者允许通过不同的选项卡、iframe 和线程进行直接通信。我尝试了以下方法:

(shared.html:)

(shared.js)

单击“启动 A”然后单击“启动 B”后,我在控制台上收到以下错误消息:

shared.html:15 未捕获的 DOMException:无法在“MessagePort”上执行“postMessage”:无法克隆 MessagePort,因为它没有被传输。

换句话说,我无法通过端口。

任何用途的 SharedWorker 也是如此。似乎在大多数情况下,常规的专用 Worker 就足够了。

0 投票
1 回答
907 浏览

angular - 如何在 Angular 中使用 SharedWorker?

我的 Angular 应用程序中已经有了 Workers。但我正在尝试创建一个共享工作者,但它失败了,说“无法获取工作者脚本”。在控制台中。

如果我用 Worker 替换 SharedWorker - 它可以完美运行。

当然,我根据需要制作了一切。创建了一个附加.tsconfig文件:

并添加webWorkerTsConfigangular.json配置中:

我发现了 Nikita Barsukov 的这篇文章,但它仅在您的 Worker 以单个文件存储在assets文件夹中时才有效。但是我的 SharedWorker 包含十几个 .ts 文件,应该像普通 Worker 一样打包。

0 投票
3 回答
648 浏览

javascript - 无法使用 worker-loader 创建 SharedWorker

尝试使用worker-loader创建 SharedWorker 它没有创建它,只是创建了 Worker。似乎它忽略了选项。

父代码中的用法

工人代码

webpack 规则

但在控制台中,它显示为 Worker 类。它有什么问题?

在此处输入图像描述

依赖关系

这件事要求我添加更多细节:“看起来你的帖子主要是代码;请添加更多细节。” 这只是一个存根文本。对不起。

0 投票
1 回答
165 浏览

sockets - 为什么 GitHub 将 SharedWorker 用于 WebSocket

我很好奇 GitHub 在问题更新时如何重新渲染组件,并发现它们在 SharedWorker 中使用 WebSocket。
但是为什么他们在 SharedWorker 内部使用它,而不是在主线程中?多线程使用 WebSocket 的主要好处是什么?

0 投票
0 回答
141 浏览

javascript - 如何在浏览器客户端中通过 websockets 实现 mqtt?

我正在尝试使用Paho JS 库在我的 Web 应用程序中通过 websocket 使用 mqtt来实现通知。我需要使用持久连接(接收任何待处理的消息),因此必须使用唯一的客户端 ID。

问题 1:多个选项卡充当 mqtt 客户端,使用相同的客户端 ID,因此在无限循环中断开和连接(因为我已将重新连接设置为 true)

我使用 Shared Worker 解决了上述问题,它现在只为所有选项卡使用一个连接,这很棒。但现在我遇到了另一个问题。

问题 2:当我在两个不同的浏览器(例如 Chrome 和 Firefox)中打开我的应用程序时,我得到了不同的共享工作者,因此两个客户端再次使用相同的 clientId 导致连接/断开循环。

任何建议将不胜感激。

0 投票
1 回答
169 浏览

laravel - Pusher - 共享网络工作者变量范围

我在 Laravel 中使用共享工作者作为推送器,这里 XYZABC 是我的推送键作为字符串,但是有没有办法可以使用我的刀片文件中定义的 ENV 变量或变量,所以我不必硬编码键那里,还需要根据国家切换频道。那么有没有办法访问共享工作脚本中刀片中定义的java脚本变量?这是我的代码

这是我工作的推送者社区的示例代码

https://github.com/pusher-community/pusher-with-shared-workers

0 投票
0 回答
36 浏览

javascript - React 中的 SharedWorker

我在我的 React 应用程序中使用 Web Worker,它有一个如下所示的辅助类:

工人看起来像:

然后我可以使用创建工人

这工作正常,但是我现在需要使用 SharedWorker 并且我无法让它工作。我发现的所有资源都显示了普通的网络工作者。有这个 SO Question Using Shared Worker in React但它对我不起作用。它实际上看起来与我的常规 WebWorker 代码相同,但这不起作用,因为 SharedWorkers 要求您实现一个 onconnect 函数,而我不明白该怎么做。我发现的非反应示例将工作脚本显示为:

但是如果我把它放在我的 worker js 文件中并使用 WebWorker 帮助程序遵循相同的模式,worker.toString() 只会返回 [object Window] 并且它永远不会被执行。我不明白如何创建一个将被调用的“onconnect”函数。我尝试过这样的变体:

最终没有什么对我有用。显然我根本不懂 Javascript 中的导出。如果我只是导出一个名为 onconnect 的函数,它永远不会被调用,显然 onconnect 必须属于某种类上下文(如 Window 或 Self),但我不明白需要什么

谢谢你,特洛伊。