Spoiler: Verwenden Sie Vizdom.dev , um in der DOT-Sprache geschriebene DAGs darzustellen
Als Softwareentwickler habe ich gelegentlich mit DAGs gearbeitet – bei den meisten davon geht es um deren Visualisierung. In vielen Fällen fiel es mir schwer, ein schnelles Rendering zu erhalten, und ich suchte nach Werkzeugen.
Zum Glück gibt es die Vertrauenswürdigen
Außer…
- Im Web funktioniert es nicht gut*
- Ich muss es installieren
- Es verwaltet keine DOT/GV-Dateien online
Überlegungen
*Okay, technisch gesehen kann Graphviz zu WebAssembly kompiliert werden, und ein paar talentierten Leuten ist es gelungen, ein paar nette Projekte wie Dreampufs zu erstellen
Ich möchte zum Beispiel mein Diagramm in speichern
ich könnte benutzen
Leider muss ich DOT in die Abschlagsvariante übersetzen, die Mermaid benötigt. Für kleinere Textdarstellungen kann ich ChatGPT verwenden, um sie für mich zu konvertieren, aber es macht häufig grammatikalische Fehler und das Diagramm lässt sich nicht rendern – was es als Automatisierungsquelle unzuverlässig macht.
Dann ist da
Das Problem
- Ich möchte programmgesteuert generierte DOT-Ausgaben rendern – keines der Tools scheint mir dabei zu helfen, dieses Ziel zu erreichen.
- Ich möchte Links einbetten, die Diagramme rendern.
- Ich möchte das Rendering für Aktualisierungen online speichern oder visuell mit anderen Diagrammen vergleichen.
Die Lösung
Ja, ich habe eine gebaut
…Und es ist komplett in Rust gebaut 🦀 vielen Dank an
tl;dr – eine einfache, speziell entwickelte App zum schnellen Online-Rendering von DAGs
Die Minimierung von Kantenüberschneidungen bei der Graphgenerierung, eine anerkannte NP-schwere Herausforderung, ist der Schlüssel zur Erstellung optisch ansprechender Graphen. Das Team von Terrastruct hat eine herausragende Arbeit veröffentlicht
Diese Version ist besonders effektiv für die Darstellung hierarchischer Diagramme und nutzt die komplexe Komplexität dieses Problems.
Das Rendern großer DAGs (mehr als 500 Knoten/Kanten) ist mit Graphviz tendenziell etwas träge. Dagre + D3 (
Ich glaube, es ist ein guter Kompromiss für die Arten von Attributen, die programmgesteuert generiertes DOT nutzen wird.
Vizdom-Funktionen
- 🚀 Blitzschnelles Rendern
- 💾 Speichern Sie Grafiken in Links
- 0️⃣ Keine Abhängigkeiten und keine Installation erforderlich
Rendering-Geschwindigkeit
Nun, es ist ein Vergleich zwischen Äpfeln und Birnen. Graphviz erstellt immer noch großartige Visualisierungen und unterstützt mehr
Ja, ich weiß, es ist schrecklich, jahrelange Erfahrung und Tools mit der über 30-jährigen Erfolgsgeschichte von Graphviz zu vergleichen, aber für meinen engen Anwendungsfall ist es wahnsinnig schnell. Hier sind einige Wandzeiten auf meinem M1 Macbook Pro zum Rendern
- Native Graphviz: ~30 Sekunden
- Chrome (WASM) Graphviz: stürzt ab*
- Chrome (Javascript) DagreJS: ~10 Sekunden
- Chrome (WASM)
Vizdom : ~1 Sekunde**
* Es stürzt ab, weil das Emscripten-Flag ALLOW_MEMORY_GROWTH=1
nicht gesetzt ist, wodurch der Gesamtspeicher auf 16 MB begrenzt wird. Dies kann behoben werden, aber ich habe kein Online-Projekt gefunden, das mit dem betreffenden Diagramm umgehen kann.
** Das Beispieldiagramm wird durch Auswahl von Example 14
in der Editoransicht gerendert. Das Aktualisieren der Seite führt dazu, dass Sie die Seite aktualisieren und einen 414-Fehler erhalten, da der im Diagramm verbleibende URI zu groß ist. Ich arbeite an einer besseren Lösung zum Speichern größerer Diagramme.
Speichern Sie Diagramme in Links
Wenn Sie Änderungen an der DOT-Datei vornehmen, werden Sie feststellen, dass die URL sofort einige Abfrageparameter aktualisiert, um die Diagramm- und Layoutoptionen zu speichern, sodass Sie immer auf eine Kopie Ihrer Daten verweisen können, indem Sie einfach den Link speichern!
Es gibt einen Haken: Große Diagramme neigen dazu, den URI für AWS zu groß zu machen (wo
Ich arbeite derzeit an einer Lösung für den Umgang mit größeren Diagrammen, habe aber in der Zwischenzeit einige Möglichkeiten zum Beibehalten und Speichern von Diagrammen hinzugefügt:
- Kopieren Sie einen einbettbaren Link, der automatisch eine Ansicht rendert, die das Diagramm maximiert.
- Kopieren Sie ein Iframe-Snippet, um es in jede Anwendung einzubetten, die das Rendern unterstützt.
- Oder laden Sie einfach die gerenderte SVG-Datei herunter.
Hier ist ein Beispiel dafür, wie die Editoransicht aussieht
Gehen Sie zur Editor-Ansicht und laden Sie Example 42
Diff-Ansicht
Gelegentlich habe ich versucht, zwei von mir erstellte Diagramme zu vergleichen. Während ich dabei war, habe ich noch eines hinzugefügt
Farblegende:
- Rot: Gelöscht
- Orange: Geändert
- Grün: Hinzugefügt
Hier ein paar Schnappschüsse:
Klicken Sie auf mich: Ändern einer Knoten-ID von „e“ in „f“
Klicken Sie auf mich: Hinzufügen von „cluster=true“
Zukünftige Ausrichtung
Wenn Sie Feedback haben, können Sie mir gerne eine Nachricht senden
Vielen Dank fürs Lesen – Wenn Ihnen dieser Artikel gefallen hat, folgen Sie ihm bitte!
[1]: ER Gansner, E. Koutsofios, SC North und K. . -P. Vo, „Eine Technik zum Zeichnen gerichteter Graphen“, in IEEE Transactions on Software Engineering, Bd. 19, nein. 3, S. 214–230, März 1993, doi: 10.1109/32.221135.
Auch hier veröffentlicht