Improving manifest loading performance for declarative package manifests

This is amazing, thanks a lot for the work :clap:. SPM Resolution performance is the top concern for our engineers in our DevEx surveys and this has helped a lot. From 2:40s having warm caches to around 0:30s (which we are in the process of reducing further by moving our ~100 remote dependencies over to a Swift Package Registry).

We have over 200 local packages and one benefit from this work is that the GitInformation structure is only populated if it's accessed (unlike in the executing path where it always is). In our monorepo, over half of the resolution time goes into this redundant git status calls by SPM. I even opened a PR to address this but I believe Doug's work brings makes the fix more structural (rather than throwing in another cache) plus of course the speedup from avoiding "running" the packages.

I'm excited for this and very glad that there seems to be a bunch of ongoing efforts to address SPM performance.

If the future is to have another mode or syntax for declarative packages I wouldn't be opposed to it, but I don't think that's a reason this work shouldn't land in the meantime, as it solves real problems we have today.

6 Likes