perf(frontend): add api cache layer and reduce report polling pressure
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user