希望有人能在这里指出我正确的方向。我的电子应用程序需要每 10 分钟左右执行一次 API 调用。目前,我在渲染器进程中使用 setInterval 循环来执行此操作,该循环每 10 分钟触发一次。
它通常工作得很好,几个小时后似乎就停止了。我有几个进程可以清除并重新启动 setInterval 来尝试解决该问题,但似乎没有任何效果。
该应用程序会打开新的浏览器窗口并显示内容,这意味着主窗口可能不会一直处于焦点状态,我怀疑这可能与此有关。
我尝试过添加
powerSaveBlocker.start("prevent-display-sleep");
powerSaveBlocker.start("prevent-app-suspension");
到我的主要电子js脚本,但它似乎没有效果。该问题主要出现在 Windows 机器上。我不完全确定它是否发生在 Mac 或 Linux 上。
所以我的问题是,是否有任何原因会发生这种情况,即间隔在某个点之后就消失了? powerSaveBlocker 调用对我来说很有意义,但它们似乎并没有真正执行任何操作。
或者是否有更好的方法让后台进程定期运行来执行这些 API 调用?我看过node-schedule
但我不确定它是否会解决这个问题。
在这里回答我自己的问题,感谢@snwflk,他在对原始帖子的评论中为我指明了正确的方向。
虽然我无法绝对肯定地澄清这可以解决问题,但从那以后我也没有看到这个问题。 (它并不总是 100% 可重现,并且很难测试,因为它需要一台机器,单独放置几个小时,这可能会或可能不会显示问题)。
然而,我已经向一些客户推出了修复程序,几天后他们的机器似乎仍然在线,这是一个好兆头。
所以,解决方案是禁用backgroundThrottling
在主要的BrowserWindow
对象(间隔在渲染器进程中运行)
Docs: https:// Electronjs.org/docs/api/browser-window#new-browserwindowoptions https://electronjs.org/docs/api/browser-window#new-browserwindowoptions
一个例子
mainWindow = new BrowserWindow({
webPreferences: {
backgroundThrottling: false,
},
});
仅供参考,请注意有一些错误导致此设置无法工作,即https://github.com/electron/electron/issues/20974 https://github.com/electron/electron/issues/20974所以请务必更新您的电子版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)