Address PyConf slow-downs with deep configurations
A discussion on !305 (merged) highlighted that PyConf can become quite slow with deep configuration trees.
There are two hot spots:
- The
Algorithm.configuration
andTool.configuration
methods are called every time that component or a dependent component is configured. For deep trees, this creates a lot of calls. - The graph-drawing has a similar problem. Each component is drawn every time it's 'referenced' by anything.
We should be able to solve number 1 by memoizing/caching the method return value, which should be safe because Algorithm
and Tool
instances are contractually immutable after instantiation.
Number 2 will be a bit more of a pain because of the Graphviz API, but I'm sure it's not too hard.