electron 锁屏后定时器运行变慢问题

2023-06-27 10:54:08 +08:00
 anai1943

RT ,用 electron v16 写了个小项目,其中有个功能,需要定时每 2 秒发送 http 请求某个接口。

程序窗口可见的情况下,请求正常发送,一旦程序最小化或锁屏(硬盘已设置不休眠)下,运行几十分钟或几小时后,定时器会变成 1 分钟或者几分钟运行一次,定时器写在渲染进程内,尝试过以下方法,均未解决。

1 、设置 backgroundThrottling

官方文档: https://www.electronjs.org/docs/latest/api/browser-window#new-browserwindowoptions

const mainWindow = new BrowserWindow({
    width: 1360,
    height: 700,
    title: 'XXX',
    webPreferences: {
        preload: path.join(__dirname, 'preload.js'),
        nodeIntegration: true,
        contextIsolation: false,
        enableRemoteModule: true,
        backgroundThrottling: false
    }
});

2 、使用 nodejs 的 timers 或其它定时器 package

const {setInterval, clearInterval} = require('timers')

node-schedule: https://github.com/node-schedule/node-schedule

3 、防止系统休眠

const {app, BrowserWindow, ipcMain, Menu, dialog, powerSaveBlocker} = require('electron');
powerSaveBlocker.start('prevent-display-sleep');

请教下各位 V 友还有其它思路么?

1499 次点击
所在节点    Electron
3 条回复
woshizhuwow
2023-06-27 18:45:36 +08:00
用 Worker 应该能解决,具体记不清了,可以搜一下看看
jackytsu
2023-06-28 08:39:43 +08:00
@anai1943 可以直接在主进程里面设置定时器,然后通过 IPC 与渲染进程通信,唯一需要注意的是,在应用退出之前一定要清除定时器对象,否则会弹出 JS 错误对话框。
anai1943
2023-06-28 10:05:41 +08:00
@jackytsu 感谢,我验证下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX