Interactive traffic lacks no-op suppression: redundant view/density/sample re-ships
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 38/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- javascript, python
- Domain
- data-visualization, performance
Research direction
Start with the referenced request paths in js/src/53_interaction.ts and js/src/54_kernel.ts, then compare the cache behavior in js/src/45_lod.ts with the density and sample handlers in python/xy/interaction.py. Read spec/design/lod-architecture.md for the intended edge-tile behavior. Done means redundant view, density, and sample traffic is suppressed without changing visible chart results.
Written by the indexing model from the issue text.
Description
From a full data-transport audit at b0f8780. Three related sources of redundant interactive traffic:
- No client-side no-op suppression for
viewrequests — every non-animated_setViewschedules a request (js/src/53_interaction.ts:1548);js/src/54_kernel.ts:12-78never compares against the last-served window. A y-only pan sends an unchanged x-window and the kernel re-runs M4 for every decimated trace (python/xy/interaction.py:308-347), re-shipping byte-identical tier updates (~64 KiB per line trace at 2048 px). - Density grids re-ship whole on pans the pyramid already covers — the client caches up to 8 grids per trace (
js/src/45_lod.ts:198-220) but only for stale-while-revalidate drawing, not coverage checks; the spec's phase-3 "pan ships only newly exposed edge tiles" is documented but unimplemented (spec/design/lod-architecture.md:187-189). During wheel zoom this is one plot-sized grid (~400 KB) per ~130 ms per density trace. - Density sample overlay fully re-ships on every exact re-bin —
_density_sample_update(python/xy/interaction.py:432-487) re-samples with a fixed seed, so overlapping views select largely overlapping rows; up to 8192 points x all channels (~100-200 KiB) per view settle. The standalone client already retains its sample and re-bins locally with a span gate (js/src/54_kernel.ts:98-130) — precedent forsample: {unchanged: true}replies keyed by (seed, level, window-of-validity).
Proposed fixes: client memo of last-served (window, px) per request kind; kernel-side short-circuit when the window equals the previous request; sample-unchanged replies; eventually the spec'd keyed edge-tile shipping.
- Dominant language
- Python
- Stars
- 1.8k
- Forks
- 76
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 8
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from reflex-dev/xy
-
needs investigate performance
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
reflex-dev/xy#169 ·
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
reflex-dev/xy#516 · 1 comment ·
-
Difficulty 3/5 1-2 days Newbie friendliness 74/100
reflex-dev/xy#512 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 68/100
reflex-dev/xy#511 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 62/100
reflex-dev/xy#510 ·
Similar issues
-
area/auth bug comp/agent P3 platform/discord type/security
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
NousResearch/hermes-agent#117848 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
bancolombia/sentinel#23 ·
-
test md OpenCI
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulty 2/5 1-3 hours Newbie friendliness 88/100