Electron 应用受到 OSX 的限制

Electron app getting throttled by OSX

运行 electron 1.4.3,我 运行 遇到了一个奇怪的问题,看起来事件循环不知何故卡住了。我设置了一个间隔,每 80 毫秒更新一次,但大约 30 秒后,它突然每 10 秒只更新一次。这是我以每秒一次的间隔对其进行测试时的一些日志记录:

2016-10-26T21:30:38.017Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:39.086Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:40.316Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:41.485Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:42.750Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:43.845Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:45.053Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:46.186Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:47.257Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:48.332Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:49.452Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:50.798Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:51.951Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:53.094Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:54.206Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:55.275Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:56.343Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:57.416Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:58.583Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:30:59.704Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:00.772Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:01.841Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:02.977Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:04.048Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:05.118Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:06.289Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:07.381Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:08.506Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:09.583Z [INFO   ]-(CommandUtils             ) Polling
2016-10-26T21:31:19.964Z [INFO   ]-(CommandUtils             ) Polling

从最后几行可以看出,间隔突然从每秒一次变为每十秒一次。在我的测试中,我发现它在大约 30 秒后非常稳定地每 10 秒更新一次。

但是,此问题似乎与系统有关。我们已经在 Linux 机器上对此进行了测试,但无法重现该问题。我们在其他几台 Apple 笔记本电脑上对其进行了测试,它们和我的 Apple 笔记本电脑一样,表现出了这种奇怪的行为。此外,这个问题似乎取决于它在哪里 运行 而不是它的构建位置 - 在 OSX 中构建 Linux 然后 运行ning 在 Linux 中构建没有任何问题,但是在 Linux 中构建 OSX 然后 运行ning 在 OSX 中确实有问题。

我也试过将 electron 降级到 1.3.3,但这也没有解决问题。

更新:

我绝对怀疑某些 OSX 恶作剧。我以前没有使用浏览器 window,但在尝试附加调试器时,我最终打开了附加到应用程序的浏览器 window。一旦我这样做了,节流就没有发生。但是,如果我将该浏览器 window 放在其他东西后面(这样它就不会被渲染),节流会在大约 30 秒后发生。

那么如何防止 OSX 限制我的(目前 UI-less)电子应用程序?

Avoid app throttling when Electron is in background所述,解决方法很简单。我只需要添加

electron.powerSaveBlocker.start('prevent-app-suspension');

和 OSX 不会在 30 秒后限制我的应用程序。