完善serverless部署环境

This commit is contained in:
CN-JS-HuiBai
2026-04-10 14:40:24 +08:00
parent bfb40f4947
commit e19a21a3cc
7 changed files with 415 additions and 196 deletions

View File

@@ -138,7 +138,10 @@
let siteThemeQuery = null; // For media query cleanup
let siteThemeHandler = null;
let backgroundIntervals = []; // To track setIntervals
let realtimeIntervalId = null;
let lastMapDataHash = ''; // Cache for map rendering optimization
const appRuntime = window.APP_RUNTIME || {};
const prefersPollingRealtime = appRuntime.realtimeMode === 'polling';
// Load sort state from localStorage or use default
let currentSort = { column: 'up', direction: 'desc' };
@@ -544,12 +547,30 @@
loadSiteSettings();
// Track intervals for resource management
initWebSocket();
if (prefersPollingRealtime) {
startRealtimePolling();
} else {
initWebSocket();
backgroundIntervals.push(setInterval(fetchLatency, REFRESH_INTERVAL));
}
backgroundIntervals.push(setInterval(fetchNetworkHistory, NETWORK_HISTORY_INTERVAL));
backgroundIntervals.push(setInterval(fetchLatency, REFRESH_INTERVAL));
}
// ---- Real-time WebSocket ----
function stopRealtimePolling() {
if (realtimeIntervalId) {
clearInterval(realtimeIntervalId);
realtimeIntervalId = null;
}
}
function startRealtimePolling() {
if (realtimeIntervalId) return;
fetchRealtimeOverview();
realtimeIntervalId = setInterval(fetchRealtimeOverview, REFRESH_INTERVAL);
backgroundIntervals.push(realtimeIntervalId);
}
function initWebSocket() {
if (isWsConnecting) return;
isWsConnecting = true;
@@ -567,6 +588,7 @@
ws.onopen = () => {
isWsConnecting = false;
stopRealtimePolling();
console.log('WS connection established');
};
@@ -587,6 +609,7 @@
ws.onclose = () => {
isWsConnecting = false;
startRealtimePolling();
console.log('WS connection closed. Reconnecting in 5s...');
setTimeout(initWebSocket, 5000);
};
@@ -791,6 +814,19 @@
}
// ---- Fetch Metrics ----
async function fetchRealtimeOverview(force = false) {
try {
const url = `/api/realtime/overview${force ? '?force=true' : ''}`;
const response = await fetch(url);
const data = await response.json();
allServersData = data.servers || [];
currentLatencies = data.latencies || [];
updateDashboard(data);
} catch (err) {
console.error('Error fetching realtime overview:', err);
}
}
async function fetchMetrics(force = false) {
try {
const url = `/api/metrics/overview${force ? '?force=true' : ''}`;