dgrm.net | GitHub

Dgrm.net это редактор блок-схем.

  • У dgrm.net нет лишних кнопок;

  • Редактор быстро грузится;

  • Работает на пк и мобильных;

  • Умеет открывать png.

Dgrm.net использует SVG. Я разбирался с производительностью SVG и случайно понял как сократить исходный код. В результате кода стало в 2 раза меньше.

Рис 1. Колонка Code - кол-во строк кода. Верхняя таблица старая версия, нижняя новая. В новой версии кода в 2 раза меньше.
Рис 1. Колонка Code - кол-во строк кода. Верхняя таблица старая версия, нижняя новая. В новой версии кода в 2 раза меньше.

Началось со страницы тестирования SVG

Хотелось определить как много SVG фигур может перемещать браузер. Тестовый, одноразовый код писал быстро, не задумываясь о красоте.

В цикле создал круги.

Рис 2. Много SVG кругов. Это не блок-схема. Просто SVG круги без обработчиков событий.
Рис 2. Много SVG кругов. Это не блок-схема. Просто SVG круги без обработчиков событий.

Так выглядело перемещение:

const canvasPosition = { x: 0, y: 0 };
 
svg.addEventListener('pointermove', evt => {
    canvasPosition.x += evt.movementX;
    canvasPosition.y += evt.movementY;
 
    canvas.style.transform =
        `matrix(0, 0, 0, 0, ${canvasPosition.x}, ${canvasPosition.y})`;
});

Листинг 1. Простая функция перемещения элемента <g> canvas. canvas содержит вложенные круги.

Затем добавил zoom. Потом, для тестов на мобильных, добавил поддержку пальцев.

1/4 редактора блок-схем поместилась в одном файле

Получилась тестовая страница которую можно двигать и zoom-ить. Страница работает и на ПК и на мобильных. Весь код в одном файле. Файл занимает всего 4 экрана. 200 строк хватило на 1/4 функционала редактора блок-схем.
Доработанная версия перемещения и zoom-a SVG на GitHub.

На тот момент в dgrm.net было 60 файлов. Сложная структура, лишние абстракции. Грязный тестовый код оказался лучше.

Теперь dgrm.net следует правилу “как можно проще и ближе к платформе”. Файлов стало в два раза меньше, структура проекта упростилась.

Рис 3. Было: 60 файлов и сложная структура. Стало: 27 файлов и простая структура, все файлы поместились в один экран.
Рис 3. Было: 60 файлов и сложная структура. Стало: 27 файлов и простая структура, все файлы поместились в один экран.

Как поддержать проект

  • Начните использовать редактор блок схем dgrm.net.

  • Расскажите что думаете. Любым способом: комментарии, личные сообщения, на GitHub. Все читаю, веду список предложений.

  • Ставьте звездочки на GitHub.

Комментарии (12)


  1. Fen1kz
    29.12.2022 09:58
    +1

    В два раза сократил исходный код редактора блок-схем

    В результате кода стало в 2 раза меньше.

    В новой версии кода в 2 раза меньше.

    Файлов стало в два раза меньше, структура проекта упростилась.

    Было: 60 файлов и сложная структура. Стало: 27 файлов

    Было бы неплохо ещё хоть как-то описать что именно вы это сделали.

    Ещё не очень понятен результат, код в итоге сократился? Есть метрики какие-то, насколько, например, в файловом в соотношении уменьшился исходный код?


    1. Alex_BBB Автор
      29.12.2022 10:04
      +2

      не очень понятен результат, код в итоге сократился?

      Сократился в 2 раза

      Есть метрики какие-то, насколько, например, в файловом в соотношении уменьшился исходный код?

      Файлов стало в 2 раза меньше


  1. Cherezzabo
    29.12.2022 09:58

    Статья показалась тизером к success-story как вы эпично зарефакторили MVP. Как будто бы не хватает каких-то наглядных и конкретных примеров, как было и как стало хорошо в исходном коде. Нет пояснений почему решили отказаться от TypeScript? Или отчего в процессе разработки MVP без использования фреймворков было много бойлерплейт кода и абстракций, от которых удалось впоследствии отказаться?

    К слову, у вас в package.json осталась зависимость "typescript": "^4.8.4", которая теперь лишняя в вашем проекте, насколько я понял.

    P.S. Что за тулза вначале статьи, которая считает количество строк кода в проекте?


    1. Volkodlak
      29.12.2022 10:10

      PowerShell же, с Count Lines of Code


      1. Cherezzabo
        29.12.2022 10:12
        -1

        Жажду подробностей.


        1. Volkodlak
          29.12.2022 10:14

          поправил) извините, главное там не PS


    1. Alex_BBB Автор
      29.12.2022 10:15
      +1

      не хватает каких-то наглядных примеров, как было и как стало.

      Относитесь как к анонсу о ходе проекта.

      Как к анонсам типа:
      "Вышел ангуляр 100. Мы отказались от RxJS и вернулись к Promise. Ангуляр стал меньше на 20%".

      Или:
      "Вышел Афон 20с. Айфон 20с на 3 мм тоньше Айфон 19".

      Нет пояснений почему решили отказаться от TypeScript?

      JavaScript редактор SVG диаграмм который весит в 6,5 раз меньше bootstrap (библиотека с открытым исходным кодом) / Хабр (habr.com)

      в package.json осталась зависимость "typescript": "^4.8.4", которая теперь лишняя

      Не лишняя. typescript используется при разработке для проверки типов.
      В package.json "tscheck": "node_modules\\.bin\\tsc --noEmit -p ./jsconfig.json",

      Что за тулза вначале статьи, которая считает количество строк кода в проекте?

      https://github.com/AlDanial/cloc


  1. vladvul
    29.12.2022 10:07

    что мне не хватает в диаграммах это возможности легко подписывать стрелочки и самое главное точки соединения, чтобы написать например ip адрес снаружи точки присоединения, и имя демона в внутренней стороны блока. Уже две декады жду такую программу!


    1. Alex_BBB Автор
      29.12.2022 10:22

      Спасибо за идею. Пока dgrm.net только flow-chart-ы умеет.


  1. itGuevara
    29.12.2022 11:53
    +1

    Не понятна конечная цель редактора dgrm.net. Догнать drawio? Это видимо не скоро. Но чем-то нужно привлечь интерес к dgrm.net. Видимо можно попробовать добавить что-то, чего нет в drawio, а например есть в visio, например, интеграцию с Exсel или google sheets.

    Можно добавить специальные шаблоны (нотации), например, VAD или EPC. А "конек" был бы аналог: SmartDesignARIS


    1. Alex_BBB Автор
      29.12.2022 13:13

      Идея такая:
      Быстро рисовать блок-схемы симпатичного вида. Минимум кнопок.

      Например Snipping Tool. Удобный инструмент для скриншотов. Не пытается стать Photoshop-ом.

      Draw.io не ориентир.

      VAD, EPC, BPMN в планах.

      >SmartDesign, ARIS
      Сделать BPM систему? Dgrm.net это часть BPM системы.
      Видео презентация https://vimeo.com/632994077
      Демо конструктора форм https://alexeyboiko.github.io/FormDesignerDemo/ 
      Код dgrm.net как раз используется для описания состояний из видео презентации.


      1. itGuevara
        29.12.2022 13:51

        Странички Видео презентация и Демо конструктора форм открываются (хром), но в первой - темный экран с видео, а во втором непонятно, какие кнопки жать.

        SmartDesignARIS, например, для EPC, это когда рядом с "полем отрисовки" есть табличка, в ней набираешь имя функции (в столбце функции) и она автоматом рисует элемент "функция" с указанным именем и наоборот: нарисовал в схеме, а она в таблицу подставляет нарисованное (в соответствующее поле). Также с другими объектами ЕРС: события и т.п.

        Т.е. задал алгоритм в табличном виде, а SmartDesign автоматом его отрисовал. Конечно для BPM - системы этого не достаточно, это просто помощь в отрисовке для "очень быстрого и простого создания схем". Идеальным был бы импорт \ экспорт такой таблицы в Excel.