Accelerating scc startup speed with code generation #594
+12,793
−122
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We skip the JSON serialization and convert the data directly into Go code, which saves considerable startup time.
"scc --languages" is now 40% faster:

Running on a small code base can gain 7% improvements and on big code bases it could be 1~3%:

Pros:
Cons:
languageDatabase
is not required, because now the language data will always be loaded at startup. For examplescc --help
is 10% slower than before. However, there are only very few scenarios that don't require language data.If you prefer compressed JSON data, that's fine. This code generator is only my weekend DIY :)