gpt4 book ai didi

electron - NWJS,Electron - DOM 在长时间运行过程中不更新

转载 作者:行者123 更新时间:2023-12-03 12:28:30 25 4
gpt4 key购买 nike

就像 this unanswered question ,我有一个长时间运行的过程,在此过程中我希望更新应用程序唯一窗口的 HTML——但 DOM 直到上述过程完成后才会更新。

NW 和 Electron 都是这种情况。

代码被调用,因为相同的例程也记录到 console - 通过 window 访问传递给进程的实例,该进程位于 Node 模块中。

我找不到引用此类问题的文档,也找不到可能有帮助的 Chromium 标志。

使用 setInterval 时填充innerText每秒时间的元素,更新在长时间运行的文件解析过程中停止。

编辑:这个问题是我在谷歌搜索“NWJS 不更新 DOM”的第一个结果......

最佳答案

阻塞 Chromium 主进程的长时间运行的进程也会阻塞渲染器。

解决方案是创建一个单独的进程,并让它通过 IPC 将状态更新发送回渲染器:

        this._service = fork(
path.join(__dirname, 'service'),
[],
{ stdio: ['inherit', 'inherit', 'inherit', 'ipc'] }
);

this._service.on('error', (err) => {
console.log('child error', err);
});

this._service.on('message', msg => {
console.log('message from child:', msg);
switch (msg.cmd) {
case 'hello':
console.log('hello from parent');
break;
case 'log':
this.parentLog(msg.html);
break;
case 'progress':
this.progressBar.update(msg.pc);
break;
}
});

在衍生的子进程(在上面的例子中命名为 service.js),使用 process.send将 JSON 传输到父级:
const childLog = (html) => {
process.send({ cmd: 'log', html: html });
}

请注意,如果您的父级不是 Electron 渲染器,它可能正在通过 window 访问 DOM。从渲染器传递。

关于electron - NWJS,Electron - DOM 在长时间运行过程中不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56079241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com