Changeset 6fab3f3 in Klonkt for src/assets/js/guardian.js


Ignore:
Timestamp:
08/08/2026 10:42:20 PM (4 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
cae7bfc
Parents:
060d4a5
git-author:
Robin <roboburr@…> (08/08/2026 10:42:18 PM)
git-committer:
roboburr <roboburr@…> (08/08/2026 10:42:20 PM)
Message:

Een lange poll voor alles wat de Guardian te verwerken krijgt (Barts opdracht, 9-8)

Het paneel tikte elke 45 seconden, ongeacht of er iets gebeurd was. Nu hangt er
een verzoek open tot er iets IS. Dat is niet alleen zuiniger -- het is vooral
sneller: een hulproep stond eerst tot drie kwart minuut te wachten op de klok.

WAKKER OP ALLES, en dat is de kern van de opdracht. De guardianship-module zendt
veertien soorten gebeurtenissen uit; die gingen tot nu toe alleen naar push, en
push kiest bewust een handvol. De tien soorten zonder pushtekst -- een stem op
een lapse, een uitkomst, een review -- zag je pas bij de volgende tik. Wie maak
je WAKKER en wat moet een openstaand scherm WETEN zijn twee verschillende
vragen, en ze hadden hetzelfde antwoord.

Naast die bus wekt ook de tijdlijn (onNews): de berichten van je wards staan in
ditzelfde scherm. En de twee paden die niet via notify() lopen -- een
hulpmarkering van een mede-guardian, en een poortverzoek van een kind -- wekken
nu zelf.

EERST KIJKEN, DAN WACHTEN. Veranderde er iets tussen het vorige antwoord en dit
verzoek, dan is de merksteen al anders en gaat het antwoord meteen de deur uit.
Zou je eerst gaan wachten, dan blijft nieuws dat net in dat gaatje viel 25
seconden liggen -- en bij een hulpvraag is dat de verkeerde vertraging.

Het tikje blijft als vangnet, maar op vijf minuten in plaats van 45 seconden:
valt er een wekker weg (een pad dat niet wekt, een herstart midden in een
verzoek), dan mag het scherm niet voorgoed stilstaan. Met de ETag kost zo'n tik
meestal een lege 304.

EEN NAAD DIE IK EERST NIET KON RAKEN. Het wekken zat verstopt in de deps-literal,
en de mutatie die het weghaalde bleef groen -- mijn toetsen dekten alleen de bus.
onGuardianshipEvent is nu een functie met een naam, precies zoals
guardianEventPush dat al was, en de mutatie is nu rood. Een lange poll die niet
wekt is niet te onderscheiden van een trage server, en dat is het soort fout dat
niemand meldt.

Tien toetsen. Suite 770/770.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/guardian.js

    r060d4a5 r6fab3f3  
    967967  }
    968968
     969  // ── De lange poll (Barts opdracht, 9-8) ──────────────────────────────
     970  //
     971  // Het paneel tikte elke 45 seconden, ongeacht of er iets gebeurd was. Nu hangt
     972  // er een verzoek open tot er iets is dat je moet verwerken -- een aanbod, een
     973  // volgverzoek, een gate-voorstel, een hulpvraag. Dat is niet alleen zuiniger,
     974  // het is ook SNELLER: een hulproep stond eerst tot drie kwartier van een
     975  // minuut op het scherm te wachten.
     976  //
     977  // 304 = stilte, en dan meteen opnieuw wachten. Alleen bij 200 wordt er iets
     978  // opnieuw getekend.
     979  var pollBezig = false;
     980  function longPoll() {
     981    if (pollBezig || document.hidden) return;
     982    pollBezig = true;
     983    fetch('/guardian/api/state?wait=25&site=' + encodeURIComponent(S.site))
     984      .then(function (r) {
     985        pollBezig = false;
     986        if (r.status === 304) return null;          // stilte
     987        return r.json().then(function (s) {
     988          if (s && !s.error) { S = s; T = s.strings || T; renderAll(); }
     989          return loadFeed().then(loadFollowReqs);
     990        });
     991      })
     992      .then(function () { setTimeout(longPoll, 200); })
     993      .catch(function () {
     994        // Netwerk weg of server herstart: niet meteen opnieuw beuken.
     995        pollBezig = false;
     996        setTimeout(longPoll, 5000);
     997      });
     998  }
     999
    9691000  // ── 2. Adopt ───────────────────────────────────────────────────────────
    9701001  var form = document.getElementById('adopt-form');
     
    10721103  // kijkt: dat waren verzoeken voor een tabblad op de achtergrond. Bij terugkomen
    10731104  // meteen een keer, want dan is de kans op nieuws het grootst.
    1074   setInterval(function () { if (!document.hidden) refresh(); }, 45000);
    1075   document.addEventListener('visibilitychange', function () { if (!document.hidden) refresh(); });
     1105  // De lange poll doet het werk. Het tikje blijft als vangnet, maar veel trager:
     1106  // valt er een wekker weg (een pad dat niet wekt, een herstart midden in een
     1107  // verzoek), dan mag het scherm niet voorgoed stilstaan. Vijf minuten in plaats
     1108  // van vijfenveertig seconden, en met de ETag kost zo'n tik meestal een lege 304.
     1109  longPoll();
     1110  setInterval(function () { if (!document.hidden) refresh(); }, 300000);
     1111  document.addEventListener('visibilitychange', function () {
     1112    if (document.hidden) return;
     1113    refresh();
     1114    longPoll();       // bij terugkomst weer een wachter openzetten
     1115  });
    10761116  } catch (e) {
    10771117    fatal((e && e.message) || String(e));
Note: See TracChangeset for help on using the changeset viewer.