ReactJS:如何检测 XHR 请求之间的网络空闲
ReactJS : How to detect network idle between XHR requests
我对 JS 世界和使用 React JS 还很陌生。找不到任何确切的解决方案。
我想实现一个应用程序级别的空闲计时器,当用户在特定时间段内没有发出任何服务器请求时,该计时器将被激活。该函数应在最后一个 XHR 请求的 X 分钟后触发,无论用户是否在组件之间导航。
例如 - 如果用户单击一个调用 API 的按钮,并且只是在屏幕上播放 X 分钟而没有再次调用服务,则应触发该功能。在这个阶段,虽然用户在网站上并没有闲着,但在网络上却闲着activity。我想检测到这一点并执行一些操作。
另外,想知道解决方案对性能的影响。谢谢!
我不确定,但您可以尝试从 downlinkMax 中减去下行链路。
但是这个Api没有得到很好的支持Can i use
使用PerformanceObserver
检测fetch
然后add/updatetimer
使用setTimeout
let timer;
const observer = new PerformanceObserver((items) => {
items
.getEntries()
.filter(({ initiatorType }) => initiatorType === "fetch")
.forEach((entry) => {
console.log("Made fetch request", entry.name);
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => console.log("(idle) After 2 sec"), 2000);
});
});
observer.observe({
entryTypes: ["resource"],
});
fetch("https://swapi.dev/api/planets/1/").then((res) => res.json());
setTimeout(
() => fetch("https://swapi.dev/api/planets/2/").then((res) => res.json()),
1000
);
setTimeout(
() => fetch("https://swapi.dev/api/planets/3/").then((res) => res.json()),
3000
);
我对 JS 世界和使用 React JS 还很陌生。找不到任何确切的解决方案。
我想实现一个应用程序级别的空闲计时器,当用户在特定时间段内没有发出任何服务器请求时,该计时器将被激活。该函数应在最后一个 XHR 请求的 X 分钟后触发,无论用户是否在组件之间导航。
例如 - 如果用户单击一个调用 API 的按钮,并且只是在屏幕上播放 X 分钟而没有再次调用服务,则应触发该功能。在这个阶段,虽然用户在网站上并没有闲着,但在网络上却闲着activity。我想检测到这一点并执行一些操作。
另外,想知道解决方案对性能的影响。谢谢!
我不确定,但您可以尝试从 downlinkMax 中减去下行链路。
但是这个Api没有得到很好的支持Can i use
使用PerformanceObserver
检测fetch
然后add/updatetimer
使用setTimeout
let timer;
const observer = new PerformanceObserver((items) => {
items
.getEntries()
.filter(({ initiatorType }) => initiatorType === "fetch")
.forEach((entry) => {
console.log("Made fetch request", entry.name);
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => console.log("(idle) After 2 sec"), 2000);
});
});
observer.observe({
entryTypes: ["resource"],
});
fetch("https://swapi.dev/api/planets/1/").then((res) => res.json());
setTimeout(
() => fetch("https://swapi.dev/api/planets/2/").then((res) => res.json()),
1000
);
setTimeout(
() => fetch("https://swapi.dev/api/planets/3/").then((res) => res.json()),
3000
);