Skip to content

perf: fast relay reads, eliminate blocking queries#59

Merged
kurt-croix merged 1 commit into
mainfrom
fix/fast-relay-queries
May 12, 2026
Merged

perf: fast relay reads, eliminate blocking queries#59
kurt-croix merged 1 commit into
mainfrom
fix/fast-relay-queries

Conversation

@kurt-croix

Copy link
Copy Markdown
Owner

Problem

Homepage latest episode took 8s to load. Episodes page rendered all at once.

Root Cause

  1. NPool.query() waits for ALL relays to EOSE. 3 of 6 relays (nostr.band, ditto.pub, nostr.wine) were timing out, blocking every query.
  2. Both useLatestEpisode and useInfiniteEpisodes made TWO sequential relay queries (episodes → livestream starts), doubling latency.

Changes

  • NostrProvider: Read from 3 fast relays only (damus ~120ms, primal ~175ms, nos.lol ~180ms). Publish to all 6 for broad distribution.
  • useLatestEpisode: Removed fetchLivestreamStarts — single query instead of two sequential. created_at is sufficient for determining latest episode.
  • useInfiniteEpisodes: Removed fetchLivestreamStarts — episodes render immediately instead of waiting for second relay roundtrip.

Result

  • Homepage latest episode: ~8s → ~200ms
  • Episodes page: renders immediately with stagger animation

- NostrProvider: read from 3 fast relays only (damus, primal, nos.lol ~200ms)
  but publish to all 6 for broad distribution. NPool.query() waits for ALL
  relays to EOSE, so slow/unresponsive relays (nostr.band, ditto, wine)
  were blocking every query for 5-8s.
- useLatestEpisode: removed fetchLivestreamStarts — single relay query now
  instead of two sequential. created_at is sufficient for finding latest.
- useInfiniteEpisodes: removed fetchLivestreamStarts — episodes render
  immediately instead of waiting for a second relay roundtrip.
@kurt-croix
kurt-croix force-pushed the fix/fast-relay-queries branch from c2702d5 to 007ed5e Compare May 12, 2026 14:35
@kurt-croix
kurt-croix merged commit b122960 into main May 12, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants