Skip to content

sessions.updated handling is slow in dev (Redux warnings, long tasks) #7

@danshapiro

Description

@danshapiro

Summary

Client handling of sessions.updated is slow in dev, triggering Redux serializable middleware warnings, WS handler slow warnings, and long tasks. Resource timing warnings appear inflated because the main thread is blocked.

Impact

  • UI stalls during session updates.
  • Lots of warning noise in client logs, making real issues harder to spot.

Evidence (from server-debug.jsonl via client log forwarding)

  • 2026-02-02T01:20:33.703Z SerializableStateInvariantMiddleware took 53ms (threshold 32ms); later peaks at 144ms.
  • 2026-02-02T01:21:06.834Z perf.ws_message_handlers_slow durationMs=240.3 messageType=sessions.updated.
  • perf.longtask warnings 50-311ms early; later peak 436ms.
  • perf.resource_slow for /api/terminals and /api/logs/client shows 6-16s durations while server-side HTTP logs show ~12ms, suggesting main-thread stalls inflate resource timing.

Repro steps

  1. Enable client perf logging (VITE_PERF_LOGGING=true) and server perf logging (PERF_LOGGING=true).
  2. Use a large sessions dataset (e.g., ~118 projects / ~2357 sessions).
  3. Load the app and observe repeated sessions.updated warnings and long tasks in server-debug.jsonl.

Suspected root cause

  • src/App.tsx handles sessions.updated by dispatching setProjects with the full projects array.
  • With large payloads, Redux serializableCheck in src/store/store.ts traverses the payload and logs warnings.
  • ws-client measures handler time; large updates + React re-rendering of session list push handlers over 30ms.
  • Main-thread stalls inflate PerformanceResourceTiming durations, causing perf.resource_slow warnings even when server responses are fast.

Potential fixes

  • Throttle/debounce sessions.updated on the server or send incremental diffs.
  • Normalize session data and use memoized selectors; consider list virtualization.
  • Narrow or disable serializableCheck for large payloads in dev (at least for sessions).
  • Offload heavy processing to a Web Worker if needed.

Code refs

  • src/App.tsx: sessions.updated handler
  • src/store/sessionsSlice.ts: setProjects
  • src/store/store.ts: serializableCheck middleware
  • src/lib/ws-client.ts: perf.ws_message_handlers_slow measurement

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions