Skip to content

Instantly share code, notes, and snippets.

@cododel
Last active October 9, 2024 13:48
Show Gist options
  • Save cododel/e713d9517bb3b88496d4ea0e6607df5c to your computer and use it in GitHub Desktop.
Save cododel/e713d9517bb3b88496d4ea0e6607df5c to your computer and use it in GitHub Desktop.
Network IDLE listener
function useNetworkidleEvents(){
let activeRequests = 0;
let idleTimeout = null;
// Функция для проверки состояния сети
function checkNetworkIdle() {
if (activeRequests === 0) {
idleTimeout = setTimeout(() => {
const event = new CustomEvent('network-idle');
window.dispatchEvent(event);
}, 500);
}
}
// Настройка PerformanceObserver для отслеживания сетевых запросов
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
if (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest') {
// Увеличиваем счетчик активных запросов
activeRequests++;
clearTimeout(idleTimeout);
// Уменьшаем счетчик активных запросов после завершения загрузки
if (entry.duration > 0) {
activeRequests--;
checkNetworkIdle();
}
}
});
});
// Начинаем наблюдение за сетевыми запросами
observer.observe({ entryTypes: ['resource'] });
}
useNetworkidleEvents();
// Обработка события network-idle
window.addEventListener('network-idle', () => {
console.log('Network is idle');
});
// Остановка наблюдения при необходимости (например, при выходе из приложения)
// observer.disconnect();
@cododel
Copy link
Author

cododel commented Oct 5, 2024

Subscribe to my telegram channel, don’t miss new interesting solutions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment