perf(frontend): add api cache layer and reduce report polling pressure

This commit is contained in:
2026-02-07 18:36:55 +08:00
parent c285d1e348
commit 4874aa37f6
38 changed files with 205 additions and 131 deletions
+12 -2
View File
@@ -550,9 +550,17 @@ const mobileModules = computed(() => [
},
])
const REPORT_SYNC_STATS_EVERY = 3
let reportRefreshTick = 0
async function refreshAll(options = {}) {
const showLoading = options.showLoading ?? true
if (refreshing.value) return
const forceStatsSync = Boolean(options.forceStatsSync)
const shouldSyncStats = forceStatsSync || reportRefreshTick % REPORT_SYNC_STATS_EVERY === 0
reportRefreshTick += 1
refreshing.value = true
if (showLoading) {
loading.value = true
@@ -593,7 +601,9 @@ async function refreshAll(options = {}) {
if (slowSqlResult.status === 'fulfilled') slowSqlMetrics.value = slowSqlResult.value
if (configResult.status === 'fulfilled') systemConfig.value = configResult.value
await refreshStats?.()
if (shouldSyncStats) {
await refreshStats?.({ force: forceStatsSync })
}
recordUpdatedAt()
} finally {
refreshing.value = false
@@ -637,7 +647,7 @@ function onVisibilityChange() {
}
onMounted(() => {
refreshAll({ showLoading: false })
refreshAll({ showLoading: false, forceStatsSync: true })
.catch(() => {})
.finally(() => {
scheduleRefreshLoop()
+5 -5
View File
@@ -72,7 +72,7 @@ async function onEnableUser(row) {
await approveUser(row.id)
ElMessage.success('用户已启用')
await loadUsers()
await refreshStats?.()
await refreshStats?.({ force: true })
} catch {
// handled by interceptor
}
@@ -93,7 +93,7 @@ async function onDisableUser(row) {
await rejectUser(row.id)
ElMessage.success('用户已禁用')
await loadUsers()
await refreshStats?.()
await refreshStats?.({ force: true })
} catch {
// handled by interceptor
}
@@ -114,7 +114,7 @@ async function onDelete(row) {
await deleteUser(row.id)
ElMessage.success('用户已删除')
await loadUsers()
await refreshStats?.()
await refreshStats?.({ force: true })
} catch {
// handled by interceptor
}
@@ -136,7 +136,7 @@ async function onSetVip(row, days) {
const res = await setUserVip(row.id, days)
ElMessage.success(res?.message || 'VIP设置成功')
await loadUsers()
await refreshStats?.()
await refreshStats?.({ force: true })
} catch {
// handled by interceptor
}
@@ -157,7 +157,7 @@ async function onRemoveVip(row) {
const res = await removeUserVip(row.id)
ElMessage.success(res?.message || 'VIP已移除')
await loadUsers()
await refreshStats?.()
await refreshStats?.({ force: true })
} catch {
// handled by interceptor
}