microsoft / msagljs

A JavaScript graph layout engine: port of MSAGL
https://microsoft.github.io/msagljs/
MIT License
146 stars 15 forks source link

Removing @esfx dependency #86

Closed aocenas closed 3 months ago

aocenas commented 3 months ago

We have a bit of a problem with this library because part of esfx needs to be built from source, which adds quite a bit of flakiness to our CI. You can see some details in this issue https://github.com/grafana/grafana/issues/83318.

I wondered if it would be even feasible to remove it for something else as PR contribution and if not what are the reasons, ie like is it important for performance, does it implement some specific algorithms that weren't available elsewhere or is it just part of some .NET -> JS conversion defaults?

I assume this is a bit of a long shot but wanted to know if such thing would even be an option or not before getting into it more.

levnach commented 3 months ago

By the way, if you use msagljs for small graphs, you might try its another layout type, IPSepCola, for larger graphs.

`const settings = new IPsepColaSetting() /**

levnach commented 3 months ago

I removed the dependency from esfx, and have not added any other dependencies. Here are the new packages.

aocenas commented 3 months ago

@levnach ah amazing, thank you, didn't expect this to resolve be so fast 😅 . Already merged the code with the new version https://github.com/grafana/grafana/pull/88375 and everything seems to be fine.

levnach commented 3 months ago

Great. Just one thing, as I mentioned above in this comment: for larger graphs you can still use MSAGL by switching the layout to IPSepCola. You can test it at https://microsoft.github.io/msagljs/renderer-svg/index.html. It works fast and produces good layouts. image.

aocenas commented 3 months ago

I will take a look. Right now for bigger graphs we use D3 force based layout with some tweaks, which have better performance but makes for a layout that is more "organic" and can have lots of edge crossings so would be nice to have a better layout with similar performance for these cases.