Спойлер: используйте Vizdom.dev для рендеринга DAG, написанных на языке DOT.
Как разработчик программного обеспечения, я иногда работал с группами DAG, большинство из которых предполагало их визуализацию. Во многих случаях мне было трудно получить быстрый рендеринг, и мне приходилось искать инструменты.
К счастью, есть надежный
Кроме…
- В Интернете это работает не очень хорошо*
- мне нужно установить его
- Он не управляет файлами DOT/GV онлайн.
Соображения
*Хорошо, технически Graphviz можно скомпилировать в WebAssembly, и нескольким талантливым людям удалось создать несколько изящных проектов, таких как Dreampuf.
Например, я хочу сохранить свой график в
я мог бы использовать
К сожалению, мне приходится переводить DOT в уценку, которую требует Mermaid. Для небольших текстовых представлений я могу использовать ChatGPT для их преобразования, но он часто допускает грамматические ошибки, и график отказывается отображать, что делает его ненадежным источником автоматизации.
Тогда есть
Проблема
- Я хочу отображать программно сгенерированные выходные данные DOT — похоже, ни один из инструментов не помогает мне достичь этой цели.
- Я хочу встроить ссылки, которые отображают графики.
- Я хочу сохранить визуализацию в Интернете для обновлений или для визуального сравнения ее с другими графиками.
Решение
Да, я построил
…И он полностью построен на Rust 🦀 за большое спасибо
tl;dr — простое специально созданное приложение для быстрой визуализации DAG в Интернете.
Минимизация пересечений ребер при построении графов — признанная NP-сложная задача — является ключом к созданию визуально привлекательных графов. Команда Terrastruct опубликовала выдающуюся
Эта версия особенно эффективна для рендеринга иерархических графиков, учитывая всю сложность этой проблемы.
Рендеринг больших DAG (более 500 узлов/ребер) с помощью Graphviz имеет тенденцию быть несколько медленным. Дагре + D3 (
Я считаю, что это хороший компромисс для типов атрибутов, которые будет использовать DOT.
Возможности Виздома
- 🚀 Невероятно быстрый рендеринг
- 💾 Храните графики в ссылках
- 0️⃣ Нулевые зависимости и установка не требуется.
Скорость рендеринга
Ну, это сравнение яблок и апельсинов. Graphviz по-прежнему создает отличные визуализации и поддерживает больше
Да, я знаю, что ужасно сравнивать годы опыта и инструментов с более чем 30-летней полосой работы Graphviz, но для моего узкого случая использования это безумно быстро. Вот несколько результатов рендеринга на моем M1 Macbook Pro.
- Собственный Graphviz: ~30 секунд.
- Chrome (WASM) Graphviz: происходит сбой*
- Chrome (Javascript) DagreJS: ~10 секунд.
- Хром (WASM)
Виздом : ~1 секунда**
* Сбой, потому что флаг emscripten ALLOW_MEMORY_GROWTH=1
не установлен, поэтому общий объем памяти ограничен 16 МБ. Это можно исправить, но я не нашел онлайн-проекта, который мог бы обработать рассматриваемый граф.
** Пример графика отображается при выборе Example 14
в представлении редактора. Обновление страницы приведет к ее обновлению и получению ошибки 414, поскольку URI, сохраняющийся в графе, слишком велик. Я работаю над лучшим решением для хранения больших графиков.
Храните графики в ссылках
Вы заметите, что когда вы вносите какие-либо изменения в файл DOT, URL-адрес немедленно обновляет несколько параметров запроса для хранения параметров графика и макета, что позволяет вам всегда ссылаться на копию ваших данных, просто сохранив ссылку!
Есть одна загвоздка: большие графы имеют тенденцию делать URI слишком большим для AWS (где
В настоящее время я работаю над решением для обработки больших графиков, но тем временем я включил несколько способов сохранения и хранения графиков:
- Скопируйте встраиваемую ссылку, которая автоматически отображает представление, максимизирующее график.
- Скопируйте фрагмент iframe, чтобы встроить его в любое приложение, поддерживающее его обработку.
- Или просто загрузите отрендеренный SVG.
Вот пример того, как выглядит вид редактора
Перейдите в представление редактора и загрузите Example 42
Просмотр различий
Иногда мне приходилось сравнивать два созданных мной графика, поэтому я добавил
Легенда цвета:
- Красный: удалено
- Оранжевый: модифицированный
- Зеленый: добавлено
Вот несколько снимков:
Нажмите меня: изменение идентификатора узла с «e» на «f»
Нажмите меня: добавление «cluster=true»
Будущее направление
Если у вас есть какие-либо отзывы, пожалуйста, напишите мне на
Спасибо за прочтение. Если вам понравилась эта статья, подписывайтесь !
[1]: Э.Р. Ганснер, Э. Кутсофиос, С.К. Норт и К. . -П. Во, «Техника рисования ориентированных графов», в IEEE Transactions on Software Engineering, vol. 19, нет. 3, стр. 214–230, март 1993 г., doi: 10.1109/32.221135.
Также опубликовано здесь