It’s always a good idea to enable the Profiler widget from time to time and see which components take the most time. (‘Display | Canvas Widgets | Profiler’) Typical culprits, especially when there are many objects involved, include Boolean solids (’‘Difference’, ‘Intersection’, Union’, etc.), ‘Volume’, ‘Area’ (both are often used for nothing more than obtaining center points), ‘SrfSplit’, morphing and others.
Some can be avoided (there may be much faster ways of obtaining center points than ‘Area’ or ‘Volume’, for example) and some can be disabled while adjusting parameters interactively. You can still see the effect of changes on curves and points with much quicker response time. Enable the slow components only when you have the settings you want.
Also, if you are working at “high resolution” (an ‘Image Sampler’, for example, or thousands of points, curves, shapes, etc.), it’s way more effective to perfect your algorithms at a much lower geometry count (“resolution”) and only increase the numbers when you are satisfied that code is working as intended.
Finally, you have to keep a close eye on the output of all your components. A mistaken graft here or there can produce shocking numbers of geometry, tens or hundreds of times more than expected.