From 16e13dc207d84f5e495bf18004d1dfc09190e68a Mon Sep 17 00:00:00 2001 From: Szymon Porwolik Date: Fri, 28 Nov 2025 18:26:17 +0100 Subject: [PATCH] Improved background performance --- assets/js/sections/bandmap_list.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index 891d7fa55..543f92eb1 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -814,11 +814,30 @@ $(function() { } // Handle page visibility changes (tab switching, minimize, etc.) - // Ensures filters are properly applied when returning from background + // Remove expiring spots when hidden, fetch fresh data when returning document.addEventListener('visibilitychange', function() { - if (!document.hidden && cachedSpotData && cachedSpotData.length > 0) { - // Tab becoming visible - re-apply filters to ensure table is correctly filtered - renderFilteredSpots(); + if (document.hidden) { + // Dispose tooltips to prevent Bootstrap errors + disposeTooltips(); + // Remove TTL<=0 (red/expiring) spots - they'll be stale when we return + let keysToDelete = []; + spotTTLMap.forEach(function(ttl, key) { + if (ttl <= 0) keysToDelete.push(key); + }); + keysToDelete.forEach(function(key) { + spotTTLMap.delete(key); + }); + // Also remove from cachedSpotData and redraw table + if (cachedSpotData && keysToDelete.length > 0) { + let keySet = new Set(keysToDelete); + cachedSpotData = cachedSpotData.filter(function(spot) { + return !keySet.has(getSpotKey(spot)); + }); + renderFilteredSpots(); + } + } else if (lastFetchParams.timestamp) { + fill_list(lastFetchParams.continent, lastFetchParams.maxAge, lastFetchParams.band || 'All'); + refreshCountdown = SPOT_REFRESH_INTERVAL; } });