I want to send analytics data to server at low priority. My function is:
const schedule_serversync = function (deadline) {
if (deadline.timeRemaining() > 0) {
server_sync(); //async ajax call of approx few ms duration
}
requestIdleCallback(schedule_serversync, { timeout: 60000 });
}
As soon as I call requestIdleCallback(schedule_serversync, { timeout: 60000 });
from onload
, schedule_serversync
is called immediately and the requests go into infinite tight loop. This happens even if the window is not idle (I'm clicking, moving mouse etc, but the callbacks continue).
I know I can break the tight loop using setTimeout
while rescheduling requestIdleCallback
.
My question is - shouldn't schedule_serversync
be called only when browser is idle with max delay of 60 seconds? What defines idle here? I was expecting it to be fired when user moves to some other browser tab or window. Is there a way I can set minimum delay (other than using setTimeout
of my own)?