-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[KED-2212] Improve graph performance #343
Conversation
/** | ||
* Constraint in Y for separating rows | ||
*/ | ||
export const rowConstraint = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be really helpful to add a comment to explain what each field under the Constraint object is used for and which parts of the graph it affects - would definitely be helpful to provide clarity for future development work.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah yes the docs for these fields are on the solve
function in solver.js
, I'll add a comment in this file to make note of that ten
interesting work @bru5 - as someone new to this codebase, it would be really helpful if you could provide some context to the graph layout engine setup in the PR description, particularly the reasoning behind some of the refactoring work done here that results in the improvement of the graph performance - is this based on any algorithms / graphing theory? would definitely love to understand and explore the ideas behind the current graph setup. Wondering if we could also add in some tests to test the expected constraint values based on the animals dataset? The test case setup would also help to provide clarity on the expected behaviour of the graph layout engine as well. All in all, very interesting stuff! |
@studioswong thanks for looking over the PR Yeah I'd love to discuss the approach in more detail but I think discussion of the algorithm is better left out of this particular PR as it's purely a code refactoring of the existing algorithm. The only changes made are already in the PR description, but that's a good point I've added a note to clarify that there is no algorithmic change. See Testing against a specific dataset like |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can confirm, significantly faster. Graph shape looks about the same. Spectacular work!
Note: JS tests are failing. Also I recommend merging |
# Release 3.9.0 ## Major features and improvements - Add code panel (#346) - Improve view panning behaviour when a node is selected (#356, #363, #370, #373, #374) - Improve layout performance for large graphs (#343) - Save tag state to localStorage (#353) ## Bug fixes and other changes - Improve graph layout code quality, performance and docs (#347) - Update docs to remind on compatibility of Kedro-Viz 3.8.0 with Kedro 0.17 (#367) - Update dependencies (#360, #364, #369) - Fix failing CircleCI build on Windows (#365, #366) - Refactor node-list-row CSS, fixing hover and focus states (#355, #358, #362) - Update iconography (#357, #359) - Fix missing indicator Chrome zoom bug (#349) - Fix sidebar border/box-shadow CSS rules (#351) - Fix server.py to work with versions >0.17 and update contributing docs (#348) - Fix errors when scrolling with empty pipeline (#342) - Ignore coverage on some branches and fix e2e tests (#345) - Fix icon-button tooltips on mobile (#344) - Update SVG-Crowbar to fix errors (#339) - Update contributing docs for new dev server (#341)
Description
Improves performance of the graph layout engine.
Development notes
In my tests on a large graph (860 nodes, 1500 edges), reduces its render time by about 60% / 2.5x boost.
This refactoring improves graph performance by:
This is a refactoring only, the algorithm and the output remains the same.
Another benefit is that these changes also generally improve clarity being more explicit and with more abstraction too.
QA notes
No change to behaviour or results other than performance.
Test using a very large pipeline and compare render time.
Checklist
RELEASE.md
fileLegal notice
I acknowledge and agree that, by checking this box and clicking "Submit Pull Request":
I submit this contribution under the Apache 2.0 license and represent that I am entitled to do so on behalf of myself, my employer, or relevant third parties, as applicable.
I certify that (a) this contribution is my original creation and / or (b) to the extent it is not my original creation, I am authorised to submit this contribution on behalf of the original creator(s) or their licensees.
I certify that the use of this contribution as authorised by the Apache 2.0 license does not violate the intellectual property rights of anyone else.