Electron:使用 IPC(或其他任何东西)共享 DOM 数据(例如发送 img 或 canvas)

shl*_*jin 5 javascript pixi.js electron

我正在尝试在单独的进程中重新缩放一堆 PIXI.js 纹理,以便渲染 UI 线程保持响应。PIXI.js 与这个问题无关,但我想提供更多关于我正在做的事情的背景信息。

不幸的是,我无法让它发挥作用。起初,我尝试生成/分叉一个子进程,但结果证明我只能在父进程和分叉进程之间共享 JSON 编码的数据。真糟糕。

因此,我决定打开一个隐藏的浏览器窗口并在那里重新打包它们。

本质上,我在渲染过程中执行此操作:

// Start packing ... Say, urls.length > 1000, so it's quite a lot!
const textureArray = urls.map((url, i) => {
  // get the texture (from cache, sync operation) + scale it
  const texture = PIXI.Texture.fromImage(url, undefined, undefined, 0.3);
  return texture;
});

// log data in the "hidden" window (I made it visible to access the logs, but it doesn't matter)
console.log("Done!")
console.log(textureArray)

// send to main process
ipcRenderer.send('textures', textureArray)
Run Code Online (Sandbox Code Playgroud)

打乒乓球主要流程:

  ipcMain.on('textures', (event, data) => {
    console.log("Got textures in the main")
    // sending data to another window
    mainWindow.webContents.send("textures", data)
  })
Run Code Online (Sandbox Code Playgroud)

只需在第二个渲染器窗口(带有主 UI,我试图不阻止)中接收数据时记录数据。

现在,当我比较我发送的内容和收到的内容时,我注意到细微的变化:我收到的数据中缺少 HTML 元素。

我明白为什么会发生:我尝试发送的数据包含 DOM 元素的链接,而不是 DOM 元素本身,而且 IPC 协议似乎不知道如何序列化它。(以防万一,我要发送的数据不存在于 DOM 树中,而是在new Image()内部创建的)。

我的问题是,在电子窗口之间交换此类数据的方法是什么,或者也许还有另一种方法来解决我的问题?我将不胜感激任何帮助!