我试图在一个单独的过程中重新缩放一堆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)
主要过程是打乒乓球
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()
创建的。)
我的问题是,在电子窗口之间交换此类数据的方式是什么,或者也许还有另一种方法可以解决我的问题?我将不胜感激!