Электрон: обмениваться данными DOM (например, отправить IMG или холст) с помощью IPC (или что-нибудь еще) - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь перемасштабировать кучу текстур PIXI.js в отдельном процессе, поэтому поток визуализации пользовательского интерфейса остается отзывчивым.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)
  })

И просто регистрирует данные при получении во втором окне рендерера (с основным интерфейсом, который я пытаюсь не блокировать).

Теперь, когда ясравните то, что я отправил, и то, что я получил, я заметил небольшие изменения: в данных, которые я получаю, отсутствуют элементы HTML.

Я понимаю, почему это происходит: данные, которые я пытаюсь отправить, содержат ссылку на элемент DOM, а неСам элемент DOM, и кажется, что протокол IPC не знает, как его сериализовать.(На всякий случай это имеет значение: данные, которые я отправляю, отсутствуют в дереве DOM, но создаются с помощью new Image() внутри).

Мой вопрос заключается в том, как можно обмениваться такими данными между электронамиWindows, или, может быть, есть другой способ решить мою проблему?Буду признателен за любую помощь!

...