Skip to content

Reduce polling latency from 1s fixed to 100ms progressive#61

Open
runnerelectrode wants to merge 3 commits intokenny019:devfrom
runnerelectrode:perf/faster-polling
Open

Reduce polling latency from 1s fixed to 100ms progressive#61
runnerelectrode wants to merge 3 commits intokenny019:devfrom
runnerelectrode:perf/faster-polling

Conversation

@runnerelectrode
Copy link
Copy Markdown

Summary

Server-side benchmarks show the relayer processes trades in ~200ms, but the frontend used a fixed 1000ms sleep between retry polls, adding 5-30s of unnecessary wait time during trade operations.

Changes

  • lib/helpers.ts: Replace fixed delay with progressive backoff (100ms → 120ms → 144ms → ... → 1000ms cap). Remove noisy console.log on every retry.
  • lib/zk/trade.ts: Base retry delay 1000ms → 100ms for settle, SLTP, and cancel flows
  • lib/zk/account.ts: Base retry delay 1000ms → 100ms for UTXO and output queries

Expected improvement

Operation Before After (estimated)
Settle (market close) ~10-30s polling ~2-5s polling
UTXO query ~1-5s per poll miss ~0.1-1s per poll miss
Cancel confirmation ~5-15s ~1-3s

Why this is safe

  • Same retry count (30 attempts), same total timeout budget
  • Progressive backoff prevents API flooding (caps at base * 10 = 1000ms)
  • No changes to rendering, state management, or API response formats
  • The retry() function signature is unchanged — existing callers unaffected

Test plan

  • Open + close a market order — verify settlement confirms faster
  • Cancel a limit order — verify cancel confirms faster
  • SLTP order flow — verify no regressions
  • Check browser network tab — verify no excessive API calls

Server benchmarks show order processing takes ~200ms, but the frontend
used a fixed 1000ms sleep between retry polls. This added up to 5-30s
of unnecessary wait time during trade settlement.

Changes:
- helpers.ts: replace fixed delay with progressive backoff (starts at
  base delay, grows 1.2x per attempt, caps at base*10). Remove noisy
  console.log on every retry attempt.
- zk/trade.ts: reduce base retry delay from 1000ms to 100ms for all
  settleOrder, settleOrderSltp, and cancelZkOrder polling loops.
- zk/account.ts: reduce base retry delay from 1000ms to 100ms for
  UTXO and output queries.

Polling schedule (100ms base): 100 → 120 → 144 → 173 → ... → 1000ms cap
vs old: 1000ms fixed on every attempt.

No changes to rendering logic, component state, or API response formats.
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 30, 2026

@runnerelectrode is attempting to deploy a commit to the kenny019's projects Team on Vercel.

A member of the Team first needs to authorize it.

The open order flow was bottlenecked by waitForUtxoUpdate which had a
hardcoded 5s minimum wait and 1s poll interval. Server benchmarks show
UTXO updates are available in ~1.5-3s, so the 5s floor was wasting time.

Changes:
- waitForUtxoUpdate.ts: reduce min wait 5000ms -> 1500ms, poll interval
  1000ms -> 200ms
- market.client.tsx: reduce transaction hash retry delay 1000ms -> 100ms
- limit.client.tsx: reduce transaction hash retry delay 1000ms -> 100ms
The open order flow has 3 sequential phases that take several seconds
each, but the UI only showed a single "Placing order" toast. Users had
no feedback during the ~10s wait.

Now shows:
  Step 1/3: Preparing account → Transfer broadcast → on-chain confirmation
  Step 2/3: Submitting order → sending to relayer
  Step 3/3: Confirming order → waiting for fill confirmation

Applied to both market and limit order forms.
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.

1 participant