mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-07 09:57:47 +08:00
perf(frontend): 收敛导航预取并去重首屏请求
- 导航预取仅保留 pointerdown 触发,移除 mouseenter/focus,避免鼠标划过误触发 - 后台预取只做组件懒加载,不再预取各页业务数据,减少首屏资源争抢 - 版本状态检查增加 sessionStorage 缓存(正常 20 分钟 / 错误 5 分钟 TTL) - fetchModules、必读公告拉取增加请求去重,避免并发重复请求 - 更新检查改用可清理的定时器,组件卸载时清理 - UsageRecordsTable 搜索防抖改为自定义实现,卸载时取消挂起 emit 并补充测试
This commit is contained in:
@@ -9,25 +9,34 @@ export const useModuleStore = defineStore('modules', () => {
|
||||
const loaded = ref(false)
|
||||
const loading = ref(false)
|
||||
const error = ref<string | null>(null)
|
||||
let fetchModulesPromise: Promise<Record<string, ModuleStatus>> | null = null
|
||||
|
||||
/**
|
||||
* 获取所有模块状态
|
||||
*/
|
||||
async function fetchModules() {
|
||||
if (loading.value) return
|
||||
if (fetchModulesPromise) return fetchModulesPromise
|
||||
|
||||
loading.value = true
|
||||
error.value = null
|
||||
|
||||
try {
|
||||
modules.value = await modulesApi.getAllStatus()
|
||||
loaded.value = true
|
||||
} catch (err: unknown) {
|
||||
log.error('Failed to fetch modules status', err)
|
||||
error.value = parseApiError(err, '获取模块状态失败')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
fetchModulesPromise = (async () => {
|
||||
try {
|
||||
const nextModules = await modulesApi.getAllStatus()
|
||||
modules.value = nextModules
|
||||
loaded.value = true
|
||||
return nextModules
|
||||
} catch (err: unknown) {
|
||||
log.error('Failed to fetch modules status', err)
|
||||
error.value = parseApiError(err, '获取模块状态失败')
|
||||
throw err
|
||||
} finally {
|
||||
loading.value = false
|
||||
fetchModulesPromise = null
|
||||
}
|
||||
})()
|
||||
|
||||
return fetchModulesPromise
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user