Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

I2487 — Obrazovka se streamuje a jeden stream říká otevřené stránce, které údaje se změnily

Posílat obrazovku, jak se věci zjišťují, a udržovat ji aktuální bez pollingu: shell a každý panel, jehož čtení je po ruce, se zapíše hned, panel s dosud čekajícím prvním čtením následuje v téže odpovědi a poté stránce jedno předplatné WebSocket říká, která čtení se změnila.

PŘIPRAVENO vlna 2 · p1 · profil implementation · běží samostatně

Součást development-runtime — The runtime has a development surface.

Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2487 bude přijato.

Cíl

Posílat obrazovku, jak se věci zjišťují, a udržovat ji aktuální bez pollingu: shell a každý panel, jehož čtení je po ruce, se zapíše hned, panel s dosud čekajícím prvním čtením následuje v téže odpovědi a poté stránce jedno předplatné WebSocket říká, která čtení se změnila.

Proč

ADR 0142, část 2. Po I2486 obrazovka už nečeká na zdroj, který dříve četla, ale první načtení se stále čeká celé a otevřená stránka se o změně dozví tím, že se znovu načte na časovači (60 s, nebo dohánějící opětovné čtení). Vlastník požádal o streamované UI. ADR 0033 učinilo z /events WebSocket s kurzorem a odmítlo druhý kanál událostí a slice živého streamu z dávky výkonu UI jej vybavil stránkovaným přehráním, srdečním tepem a kontrolou mezer, takže stream, na kterém lze stavět, existuje.

Aktuální stav

Odpověď se zapisuje celá s Content-Length (http/server.rs respond; chunking je vypnut). Skript UI dotazuje ?fragment každých 60 s a po I2486 znovu čte obrazovku, která dohání. /events nese pouze události provádění a UI neotevírá žádný socket.

Cílový stav

Router může odpovědět tělem psaným po částech. Obrazovka UI nejdřív zapíše svou hlavičku, shell a každý panel, jehož údaj je po ruce; panel, jehož údaj čeká, se zapíše, když dorazí, v pořadí dokumentu, takže stránka je úplná bez skriptu a nikdo nečeká na nejpomalejší zdroj, aby viděl zbytek. capability::readings publikuje typovanou událost, když se údaj změní (zdroj, digest vstupu, stav repozitáře), na modelu událostí z ADR 0033; skript UI drží jedno přihlášení na stránku, s kurzorem a kontrolou mezer, které definoval slice živého streamu, a nahrazuje panely, které jmenují změněný zdroj, vykreslením od serveru. 60s poll a opětovné čtení pro dohnání se odstraňují. Stránka bez skriptu nebo bez socketu je stále úplná a říká, kdy byla přečtena.

Rozsah

  • apps/majordomus-cli/src/http
  • apps/majordomus-cli/src/ui
  • apps/majordomus-cli/src/capability/readings.rs
  • share/ui/ui.js
  • docs/MAJORDOMUS_UI.md
  • test/cases
  • .ai/repo/project/issues/I2487.yaml

Závislosti

Kritéria přijetí

  • První bajty obrazovky, jejíž nejpomalejší zdroj čeká, dorazí dřív, než zdroj odpoví, a odpověď končí s tímto panelem na jeho místě
  • S vypnutými skripty je každá obrazovka po skončení odpovědi kompletní HTML
  • Změna čtení dorazí na odebírající stránku jako jedna typovaná událost jmenující zdroj a stránka nahradí panely, které jej citují, aniž by znovu četla celou obrazovku
  • Odběrateli, který zaostal, se to řekne a čte obrazovku znovu; nikdy nezůstane u hodnoty, o jejíž změně nebyl informován
  • Skript UI nedrží žádný časovač, který by obrazovku znovu četl

Validace

  • bin/majordomus plan validate
  • cargo test --lib http::
  • cargo test --lib ui::
  • MJ_TEST_JOBS=2 bash test/run.sh 1097_a_screen_is_streamed

Požadované důkazy

  • streamed_response_tests
  • reading_changed_event_tests
  • a_screen_is_streamed_case_1097
  • browser_probe_no_poll

Důkazy

Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.

Časová osa

zahájeno
—
ověřeno
—
dokončeno
—

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I2487.yaml. Přečtěte jej zpět přes majordomus plan show I2487.

Prohledává názvy a popisy všech stránek, které tento web publikuje.