Spoiler : utilisez Vizdom.dev pour restituer les DAG écrits en langage DOT
En tant que développeur de logiciels, j'ai parfois travaillé avec des DAG, la plupart impliquant leur visualisation. Dans de nombreux cas, j’ai eu du mal à obtenir un rendu rapide et je me suis retrouvé à chercher des outils.
Heureusement, il y a le fidèle
Sauf…
- Cela ne fonctionne pas bien sur le Web*
- je dois l'installer
- Il ne gère pas les fichiers DOT/GV en ligne
Considérations
*D'accord, techniquement , Graphviz peut être compilé dans WebAssembly, et quelques personnes talentueuses ont réussi à construire quelques projets intéressants tels que celui de dreampuf.
Par exemple, je souhaite stocker mon graphique dans
je pourrais utiliser
Malheureusement, je dois traduire DOT dans la saveur de démarque requise par Mermaid. Pour les représentations textuelles plus petites, je peux utiliser ChatGPT pour les convertir à ma place, mais il commet fréquemment des erreurs grammaticales et le graphique refusera de s'afficher, ce qui le rend peu fiable en tant que source d'automatisation.
Ensuite il y a
Le problème
- Je souhaite restituer les sorties DOT générées par programme – aucun des outils ne semble m'aider à atteindre cet objectif.
- Je souhaite intégrer des liens qui restituent des graphiques.
- Je souhaite stocker le rendu en ligne pour des mises à jour ou le comparer visuellement avec d'autres graphiques.
La solution
Ouais, j'ai construit un
…Et il est entièrement construit en Rust 🦀 avec un grand merci à
tl;dr — une application simple et spécialement conçue pour restituer rapidement les DAG en ligne
Minimiser les croisements de bords dans la génération de graphiques, un défi NP-difficile reconnu est essentiel pour créer des graphiques visuellement attrayants. L'équipe de Terrastruct a publié un remarquable
Cette version est particulièrement efficace pour le rendu de graphiques hiérarchiques, exploitant la complexité complexe de ce problème.
Le rendu de grands DAG (plus de 500 nœuds/bords) a tendance à être quelque peu lent avec Graphviz. Dagré + D3 (
Je pense que c'est un bon compromis pour les types d'attributs générés par programme que le DOT consommera.
Fonctionnalités de Vizdom
- 🚀 Rendu ultra-rapide
- 💾 Stockez les graphiques dans des liens
- 0️⃣ Zéro dépendance et aucune installation requise
Vitesse de rendu
Eh bien, c'est une comparaison entre des pommes et des oranges. Graphviz produit toujours d'excellentes visualisations et prend en charge davantage
Oui, je sais que c'est terrible de comparer des années d'expérience et d'outils autour de la séquence de plus de 30 ans qu'est Graphviz, mais pour mon cas d'utilisation restreint, c'est très rapide. Voici quelques temps de mur sur mon Macbook Pro M1 pour le rendu
- Graphviz natif : ~30 secondes
- Chrome (WASM) Graphviz : plante*
- Chrome (Javascript) DagreJS : ~10 secondes
- Chrome (WASM)
Vizdom : ~1 seconde**
* Il plante car l'indicateur emscripten, ALLOW_MEMORY_GROWTH=1
, n'est pas défini, limitant ainsi la mémoire totale à 16 Mo. Cela peut être corrigé, mais je n'ai pas trouvé de projet en ligne capable de gérer le graphique en question.
** L'exemple de graphique est rendu en sélectionnant Example 14
dans la vue de l'éditeur. L'actualisation de la page entraînera l'actualisation de la page et l'obtention d'un 414 car l'URI qui persiste dans le graphique est trop grand. Je travaille sur une meilleure solution pour stocker des graphiques plus grands.
Stocker les graphiques dans des liens
Vous remarquerez que lorsque vous apportez des modifications au fichier DOT, l'URL met immédiatement à jour quelques paramètres de requête pour stocker les options de graphique et de mise en page, vous permettant de toujours référencer une copie de vos données simplement en stockant le lien !
Il y a un hic : les graphiques de grande taille ont tendance à rendre l'URI trop grand pour AWS (où
Je travaille actuellement sur une solution pour gérer des graphiques plus grands, mais en attendant, j'ai inclus quelques façons de conserver et de stocker des graphiques :
- Copiez un lien intégrable qui affiche automatiquement une vue qui maximise le graphique.
- Copiez un extrait d'iframe pour l'intégrer dans n'importe quelle application prenant en charge leur rendu.
- Ou téléchargez simplement le SVG rendu.
Voici un exemple de ce à quoi ressemble la vue de l'éditeur du
Accédez à la vue Éditeur et chargez Example 42
Vue différentielle
Parfois, je me suis retrouvé à essayer de comparer deux graphiques que j'avais générés, alors pendant que j'y étais, j'ai ajouté un
Légende des couleurs :
- Rouge : Supprimé
- Orange : modifié
- Vert : ajouté
Voici quelques clichés :
Cliquez-moi : changer un ID de nœud de « e » à « f »
Cliquez-moi : ajout de « cluster=true »
Orientation future
Si vous avez des commentaires, n'hésitez pas à m'envoyer un message sur
Merci d'avoir lu — Si vous avez apprécié cet article, suivez-le !
[1] : ER Gansner, E. Koutsofios, SC North et K. . -P. Vo, « Une technique pour dessiner des graphiques orientés », dans IEEE Transactions on Software Engineering, vol. 19, non. 3, pp. 214-230, mars 1993, doi : 10.1109/32.221135.
Également publié ici