perf upgrade

This commit is contained in:
2026-07-12 21:26:16 -07:00
parent ec334bbed4
commit 778f0f7994
74 changed files with 1522 additions and 1014 deletions
+28 -2
View File
@@ -14,6 +14,30 @@ type SSEEvent = {
type EventHandler = (event: SSEEvent, queryClient: ReturnType<typeof useQueryClient>, currentSessionId?: string) => void;
const INVALIDATE_DEBOUNCE_MS = 1500;
const invalidateTimers = new Map<string, ReturnType<typeof setTimeout>>();
function debouncedInvalidate(
queryClient: ReturnType<typeof useQueryClient>,
filters: { queryKey: readonly unknown[] }
) {
const key = JSON.stringify(filters.queryKey);
const existing = invalidateTimers.get(key);
if (existing) clearTimeout(existing);
invalidateTimers.set(key, setTimeout(() => {
invalidateTimers.delete(key);
queryClient.invalidateQueries(filters);
}, INVALIDATE_DEBOUNCE_MS));
}
function clearPendingInvalidations() {
for (const timer of invalidateTimers.values()) {
clearTimeout(timer);
}
invalidateTimers.clear();
}
const eventHandlers: Record<string, EventHandler> = {
"connected": () => {
logger.info("New Connection");
@@ -21,8 +45,8 @@ const eventHandlers: Record<string, EventHandler> = {
"ping": () => {},
"heartbeat": () => {},
"match": (event, queryClient) => {
queryClient.invalidateQueries(tournamentQueries.details(event.tournamentId))
queryClient.invalidateQueries(tournamentQueries.current())
debouncedInvalidate(queryClient, tournamentQueries.details(event.tournamentId))
debouncedInvalidate(queryClient, tournamentQueries.current())
},
"reaction": (event, queryClient) => {
queryClient.invalidateQueries(reactionQueries.match(event.matchId));
@@ -104,6 +128,8 @@ export function useServerEvents() {
logger.info("Closing SSE connection");
shouldConnectRef.current = false;
clearPendingInvalidations();
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
timeoutRef.current = null;