Javascript Electron:使用IPC(或任何其他工具)共享DOM数据(例如发送img或画布)
我试图在一个单独的过程中重新缩放一堆PIXI.js纹理,以便渲染UI线程保持响应。js与这个问题无关,但我想提供更多关于我所做工作的上下文 不幸的是,我不能让它工作。起初,我试图生成/分叉子进程,但结果证明我只能在父进程和分叉进程之间共享JSON编码的数据。糟糕透了 因此,我决定打开一个隐藏的浏览器窗口,并在那里重新打包 基本上,我是在渲染过程中这样做的:Javascript Electron:使用IPC(或任何其他工具)共享DOM数据(例如发送img或画布),javascript,electron,pixi.js,Javascript,Electron,Pixi.js,我试图在一个单独的过程中重新缩放一堆PIXI.js纹理,以便渲染UI线程保持响应。js与这个问题无关,但我想提供更多关于我所做工作的上下文 不幸的是,我不能让它工作。起初,我试图生成/分叉子进程,但结果证明我只能在父进程和分叉进程之间共享JSON编码的数据。糟糕透了 因此,我决定打开一个隐藏的浏览器窗口,并在那里重新打包 基本上,我是在渲染过程中这样做的: // Start packing ... Say, urls.length > 1000, so it's quite a lot!
// 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)
打乒乓球的主要过程:
ipcMain.on('textures', (event, data) => {
console.log("Got textures in the main")
// sending data to another window
mainWindow.webContents.send("textures", data)
})
只需在第二个渲染器窗口中记录接收到的数据(使用主UI,我尝试不阻止它)
现在,当我比较发送的内容和接收的内容时,我注意到了细微的变化:我接收的数据中缺少HTML元素
我理解为什么会发生这种情况:我试图发送的数据包含指向DOM元素的链接,而不是DOM元素本身,而且IPC协议似乎不知道如何序列化它。(以防万一:要发送的数据不在DOM树中,而是在内部使用new Image()
创建的)
我的问题是,在电子窗口之间交换这些数据的方法是什么,或者,也许有另一种方法来解决我的问题?我将感谢任何帮助