Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

#6946 uncached-var dedupe: every uncached var is re-sent once right after hydrate, dict key order defeats the dedupe, and the _UNKEYABLE_VALUE branch is unreachable

Aperta
#7,253 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python

Direzione di ricerca

Start with State.hydrate, _get_resolved_delta, and _delta_value_key, then reproduce the behavior using event_loop/scripts/wsdrive.py and the /dedupe page, including Unkeyable.u_obj. Compare the hydrate and subsequent frames, dict ordering, and null-serializing values; done means the three reported cases match the expected behavior and the existing #6946 scenarios remain valid.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Describe the bug

Three polish items in the #6946 delta dedupe for @rx.var(cache=False), found while verifying it end to end (the feature itself works: ~42% fewer inbound websocket bytes on the campaign's click sequence, correct per client token, survives reload and redis multi-worker).

  1. Every uncached var is re-sent once right after hydrate. State.hydrate emits self.dict(), which does not go through the delta recording, so the very next event (on_load_internal, fired immediately) re-sends all of them: a 3 318 B hydrate frame followed by a 447 B frame containing only the uncached vars. One redundant frame per page load; on reconnect with a warm memo it does not appear.
  2. Dict key order defeats the dedupe. _delta_value_key digests the JSON text, so {"a": 1, "b": 2} and {"b": 2, "a": 1} have different keys and such a var is re-sent on every event, while the changelog says the value is "only included in the delta when it actually changed". Either canonicalize (sort_keys=True) or document it.
  3. The _UNKEYABLE_VALUE branch is dead, and unserializable values dedupe against each other. _delta_value_key treats a json_dumps exception as "always send", but reflex's json_dumps never raises for unknown types; it returns null for complex, a bare object() or an arbitrary class instance. Two different unserializable values therefore key identically: a complex(n, 1) var is never re-sent across three bumps.

To Reproduce

The campaign's elapp app and websocket-frame driver: event_loop/ (scripts/wsdrive.py, the /dedupe page; the Unkeyable.u_obj var for item 3), NOTES.md sections "#6946" and "anomalies" 1 to 3.

Expected behavior

Hydrate records what it sends (or on_load_internal skips values the hydrate frame carried); dict values are keyed canonically or the changelog states the limitation; values that serialize to null are either always sent or keyed by identity.

Specifics

  • Reflex 0.9.12a1 and 0.9.12a2 (#6946 is new in 0.9.12, so no baseline); after #7216 the recording moved to _get_resolved_delta, which does not change any of the three
  • Python 3.11.15, Linux

Additional context

0.9.12a1 pre-release QA, event_loop cluster, LOW. Full write-up: FINDINGS.md.

Lingua principale
Python
Stelle
28.9k
Fork
1.8k
Merge medio
2g 4h
PR unite (30g)
179

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di reflex-dev/reflex

Tutte le issue di reflex-dev/reflex

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.