A quick start might be to temporarily disable all checking of links, and see if that helps much.
This seems to be a helpful suggestion. Without profiling, it's hard to tell where the bottleneck is, but I think link checking is a good guess.
And this fairly simple (now that Lee has created a functioning test suite) could probably tell us if this is a bottleneck. If so, then at least we know where to focus our optimization efforts.
If this is the problem, we are in luck because there have been a lot of good improvement suggestions. But they all add complexity to the code (or database setup) and "premature optimization is the root of all kinds of evil," so if link checking isn't a bottleneck it would be counterproductive to spend a lot of time to try to optimize it.
--Mark