问题标签 [transferable]

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 投票
4 回答
30513 浏览

javascript - 使用来自 Web Worker 的可传输对象

我目前有这个代码来创建一个 Web Worker:

然后webwork.js是 Web Worker 的代码:

现在我想ArrayBuffer使用以下代码传输 128 兆字节:


现在我应该已经转移了变量r,我如何从 Web Worker 本身访问它。我已经尝试过, event.rjust和其他方法,例如尝试为 的数组添加第二个函数参数,但没有任何效果。rself.rArrayBuffers

如何从 Web Worker 访问传输的变量?

0 投票
1 回答
2211 浏览

javascript - chrome.runtime 是否支持发布带有可传输对象的消息?

我正在学习可转移对象:http ://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast

它们看起来非常棒,我想在我的扩展中使用它们来加速将数据从 iframe 内部传递到 iframe 外部。

我已经让这个示例代码工作了,但它使用了一个 Web Worker:

有没有人有任何关于支持的信息,或支持/crbug 使用以下端口的时间表:

我没有看到任何对它的支持或任何关于支持它的东西,但这似乎真的很奇怪!

0 投票
1 回答
1491 浏览

javascript - 使用可转移对象调用 postMessage 时,MessageChannel port.postMessage 的数据为空?

我正在学习MessageChanneltransferable objects

我的页面有一个跨域的 iframe。MessageChannel 周围的文档表明它完全支持跨域通信。

我在 iframe 内的跨域页面中有此代码:

在我的背景页面中,我有:

当我尝试 postMessage uInt8Array 缓冲区时——我在另一端没有收到任何数据:

在此处输入图像描述

但如果我尝试发送一些简单的东西,请说:

然后我看到:

在此处输入图像描述

使用可转移对象时——数据是否在其他地方表示?我似乎能够很好地传输端口,但我正在努力传输数据数组。但是,因为我的异常没有被抛出——看起来它被转移了......但它去哪儿了?

0 投票
1 回答
1557 浏览

dart - Dart 语言:如何将 String 转换为 Transferable (ByteBuffer)

我将使用 window.postMessage("", "*", [transferableData]) 在两个浏览器窗口之间发送数据。但是,我没有找到任何关于如何将类型转换为 Transferables 的直接答案。

因此,为了让我开始学习这一点,很高兴知道如何将简单的字符串转换为可传输(ByteBuffer)并在另一端(获取带有数据的消息的一侧)读取它。这将帮助我解决我的问题并了解这个概念。

重要更新:

这个问题把我引到这里:Dart Language: printing reports

可转移对象尚未在 Dart VM ( http://dartbug.com/4149 ) 上实现。这意味着,如果您通过 Dartium (Dart VM) 运行应用程序,则另一个窗口将接收和处理 postMessage 的第一个参数,而不是 Transferable Object。然而,JavaScript 完成了这项工作:对象被传输,原始数组被清空。

0 投票
1 回答
1235 浏览

javascript - Three.js:如何从 web-worker 加载动画 .json 模型?

前言

近两个星期以来,我一直在努力解决这个问题,并且离解决方案还差得远。我已经问了一些我认为会引导我走向正确方向的子问题:

其中,第二个仍然是相关的,但似乎没有人在咬人,尽管有赏金。所以我现在直接问完整的问题,我会尽量不做任何假设。(提示)解决方案将不胜感激。

问题

我在.json文件中有几个大型动画 3D 模型,例如可能加载了THREE.JSONLoader. 它们的格式有点像这样:

从主线程执行所有操作时,我已经能够使动画正常工作。但是加载和处理这些大文件会使 GUI 冻结很长时间。所以我需要将这一切委托给一个web-worker,然后在主线程中成功创建动画。

此外,我需要通过transferable objects将结果发送回主线程,以免克隆原始数据阻塞主线程。据我了解,WebGL 使用Float32Arrays,其缓冲区是可传输的对象。所以我确信这是可以做到的。

在我看来,所需的过程如下:

  1. (UI) ➝发送文件名➝ (工人)
  2. (worker) ➝下载➝进程➝发送缓冲区(包括morphTargets)➝ (UI)
  3. (UI) ➝ 在不复制任何缓冲区的情况下重建动画

这是2和3我遇到了麻烦。确切地说,需要在工作人员中创建哪些缓冲区,以及如何使它们在 UI 端表现得像正确的 ( Buffer) ?Geometry

我试过的

我知道已经存在一个相关问题:

但这个问题似乎过时了。很可能我应该使用THREE.BufferGeometry没有提到的 a (可能是因为它还不存在)。接受的答案有点令人费解,并且要求我仍然在主线程中做一些原始工作,例如下载模型并渲染它以生成缓冲区。

事实证明,BufferGeometry还不支持动画。一个satori99最近提交了一个拉取请求以添加此支持。我一直在使用该代码,但到目前为止,还无法将其应用于我的情况。似乎支持仍然很不完整。

这是我最新的拙劣尝试:

0 投票
1 回答
343 浏览

java - 为什么我不能将缓冲图像转换为可传输对象以将其发送到剪贴板?

我正在尝试将 bufferedImage 保存到系统的剪贴板,基本上我的程序会截取一个区域并将其保存为 PNG,但现在我希望它也能够将该图像发送到剪贴板,

我试过了Toolkit.getDefaultToolkit().getSystemClipboard().setContents( (Transferable) myImage, null);

Eclipse 希望我将缓冲myImage的图像转换为可传输的图像,但这是不允许的,而且我在 stackOverflow 上查看的代码与我的整个程序一样长,但我未能正确使用它,所以我不知道什么是可转让的,我怎么能从我的缓冲图像中制作一个,有人能解释一下吗?

0 投票
2 回答
785 浏览

javascript - JavaScript Float32Array 检查可转移对象是否已绝育

我在我的主线程和物理工作者之间使用可转移对象。Float32Array 来回传递,效果很好。如何检查 Float32Array 是否已绝育?

例如这是一个数组:

作为可转移对象发送

目前在我的代码中,我检查它是否像这样被绝育:

这是正确的方法还是有一些方法可以专门告诉数组是否已绝育?这是一个游戏,所以每一毫秒的增益都很重要。

0 投票
1 回答
1471 浏览

javascript - postMessage webworker 内存泄漏

我正在使用网络工作者以 10 毫秒的间隔传递一些数据。在任务管理器中,我可以看到工作内存集增加,直到我不取消间隔。

这就是我正在做的事情:

发送:

我也尝试这样做,但没有成功:

有人知道为什么这可能会泄漏吗?我目前正在 Chrome 上尝试这个。

0 投票
1 回答
3055 浏览

javascript - 通过引用以尽可能少的开销将提交的文件传递给 Web Worker

我将有一个网络工作者来解析巨大的文本文件(200000 行,虽然语法很简单)。我希望用户通过拖放或其他方式提交该文件,从而获得一个File对象:

我听说过Transferable objects。有没有办法文件传输到 Worker?以某种方式读取文件不会减慢 GUI 线程的速度?

0 投票
1 回答
313 浏览

java - 使用 dataflavor image/svg+xml 在 java 中创建 svg DataFlavor

所以我想创建一个DataFlavor,它包含一个字符串并使用java 具有mimetype image/svg+xml。我不太确定我是否了解 DataFlavor 和 mimetype 是如何连接的。我不太明白 Java 教程1

我想要的是能够使用系统剪贴板将我作为 svg 对象生成的字符串移动到其他程序。

我现在使用的代码是:

但是,这不起作用,我java.io.IOException: image/svg+xml 在尝试创建它时得到:

有人知道吗?