Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de 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

Abierto
#7,253 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@kr1shna-exe ya está trabajando en esto.

Desde el 6/10/2026.

  • #7436 de @kr1shna-exe — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Python
Estrellas
28.9k
Forks
1.8k
Merge medio
2 d 2 h
PR fusionados (30 d)
215

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de reflex-dev/reflex

Todos los issues de reflex-dev/reflex

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.