fix: frontend memory leaks — Monaco dispose, TQ cache eviction, useEffect cleanup

- Dispose Monaco editor instances on dialog close to prevent cycle leak
- Replace gcTime: Infinity with finite TTLs and evict orphaned subscription queryKeys
- Add missing useEffect cleanup for timers, move setTimeout out of useMemo
This commit is contained in:
Tunglies
2026-04-05 23:10:45 +08:00
parent 2c766e1ada
commit b8fbabae04
11 changed files with 102 additions and 25 deletions
+1 -1
View File
@@ -42,7 +42,7 @@ export const useIconCache = ({
refetchOnWindowFocus: false,
refetchOnReconnect: false,
staleTime: Infinity,
gcTime: Infinity,
gcTime: 30 * 60 * 1000,
retry: 2,
})
+5 -2
View File
@@ -93,7 +93,7 @@ export const useMihomoWsSubscription = <T>(
subscriptionCacheKey ?? '$sub$__disabled__',
]) ?? fallbackData,
staleTime: Infinity,
gcTime: Infinity,
gcTime: 30_000,
enabled: subscriptionCacheKey !== null,
})
@@ -243,8 +243,11 @@ export const useMihomoWsSubscription = <T>(
}, [subscriptionCacheKey])
const refresh = useCallback(() => {
if (subscriptionCacheKey) {
queryClient.removeQueries({ queryKey: [subscriptionCacheKey] })
}
setDate(Date.now())
}, [setDate])
}, [queryClient, subscriptionCacheKey, setDate])
return { response, refresh, subscriptionCacheKey, wsRef }
}