V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
anai1943
V2EX  ›  Electron

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

  •  
  •   anai1943 · 2023-06-27 10:54:08 +08:00 · 1366 次点击
    这是一个创建于 547 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 友还有其它思路么?

    3 条回复    2023-06-28 10:05:41 +08:00
    woshizhuwow
        1
    woshizhuwow  
       2023-06-27 18:45:36 +08:00 via Android
    用 Worker 应该能解决,具体记不清了,可以搜一下看看
    jackytsu
        2
    jackytsu  
       2023-06-28 08:39:43 +08:00
    @anai1943 可以直接在主进程里面设置定时器,然后通过 IPC 与渲染进程通信,唯一需要注意的是,在应用退出之前一定要清除定时器对象,否则会弹出 JS 错误对话框。
    anai1943
        3
    anai1943  
    OP
       2023-06-28 10:05:41 +08:00
    @jackytsu 感谢,我验证下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:52 · PVG 21:52 · LAX 05:52 · JFK 08:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.