У вас страница засыпает, потому что это улучшение новых браузеров, которые могут замедлить или остановить работу в фоновых вкладках, чтобы продлить срок службы батареи или улучшить общую производительность работы браузера.
Worker не засыпает, если вам нужны возможности фонового режима, используйте фоновый режим!
пример с засыпанием (предпочтительный)
// ==UserScript==
// @name Timeout
// @namespace [url]http://tampermonkey.net/[/url]
// @version 0.1
// @description try to take over the frequency!
// @author Malleys
// @match *://*/*
// @grant none
// ==/UserScript==
{
let lastTime = performance.now();
(function loop() {
let f = 1000 / (performance.now() - lastTime) | 0;
lastTime = performance.now();
document.title = `${f}Hz`;
setTimeout(loop, 10);
})();
}
пример без засыпания
// ==UserScript==
// @name Timeout & Worker
// @namespace [url]http://tampermonkey.net/[/url]
// @version 0.1
// @description take over the frequency! Here we go!
// @author Malleys
// @match *://*/*
// @grant none
// ==/UserScript==
{
const workerCode = `
let lastTime = performance.now();
(function loop() {
let f = 1000 / (performance.now() - lastTime) | 0;
lastTime = performance.now();
postMessage(f);
setTimeout(loop, 10);
})();
`;
const blob = new Blob([workerCode], { type: "application/javascript" });
const worker = new Worker(URL.createObjectURL(blob));
worker.onmessage = ({ data }) => {
document.title = `${data}Hz`;
};
}