Kapitel 1: Zwei Wege zum selben Diagramm
MLTimeGraph gibt es zweimal. Einmal als TypeScript-Bibliothek, die im Browser zeichnet, und einmal als Go-Bibliothek, die SVG auf dem Server zeichnet — kein DOM, kein Browser, kein Headless-Irgendwas.
Das ist keine doppelte Arbeit. Es ist die Antwort auf zwei verschiedene Fragen.
Wenn der Server zeichnet
Ein Bericht, der als PDF herausgeht. Eine E-Mail mit den Messwerten des Tages. Ein Dashboard in einer Umgebung, in der JavaScript nicht erlaubt ist. Ein Bild, das in zehn Jahren noch genauso aussehen soll.
In all diesen Fällen ist das Diagramm eine Datei, kein Programm. Die Go-Seite liefert genau das: einen SVG-String, erzeugt aus einer JSON-Beschreibung, in Millisekunden, ohne dass irgendwo ein Browser startet.
Wenn der Browser zeichnet
In dem Moment, in dem jemand in die Daten schauen will. Zoomen, verschieben, einen Wert unter dem Cursor ablesen, zwei Bereiche vergleichen. Ein Bild kann das nicht, und der Versuch führt zu Bildern, die du anklickst und die weitere Bilder laden.
Die Demo unten läuft wirklich — bewege den Mauszeiger über die Kurve, ziehe einen Bereich auf, scrolle zum Zoomen.
Warum beides dasselbe Diagramm ist
Die Go-Seite ist eine Portierung der TypeScript-Variante, kein separates Projekt mit ähnlichem Ergebnis. Dieselben Achsenberechnungen, dieselbe Zeitformatierung, dieselben Schwellenwerte. Eine Konfiguration, die im Browser ein bestimmtes Bild erzeugt, erzeugt auf dem Server dasselbe Bild.
In der Praxis: Du kannst eine Ansicht interaktiv entwerfen und sie dann serverseitig ausliefern, ohne sie ein zweites Mal zu beschreiben.
Die Versionen der beiden Hälften werden bewusst synchron gehalten —
ml-time-graph auf npm und das Go-Modul-Tag go-time-graph/vX.Y.Z tragen
dieselbe Nummer, damit „dasselbe Release“ eine überprüfbare Aussage bleibt.