Performance issue in makeSchema
with schemas containing a lot of extensions
#4020
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.
For schemas with a large amount of object extensions,
makeSchema
can allocate a lot of memory due to the immutable nature ofTypeRegistry.*extensions()
.The main culprit is
src/main/java/graphql/schema/idl/ImplementingTypesChecker.java
which repeatedly callsobjectTypeExtensions
andinterfaceTypeExtensions
. (first commit)buildObjectType
is also an issue. (second commit).First commit fix on
ImplementingTypesChecker
should make a lot of sense, but forbuildObjectType
, I'd love your opinions. I can cache all kinds of extensions onBuildContext
(only did object type for now, as that was our issue).Can also discuss if there should be cheaper getters on
TypeRegistry
. I welcome your thoughts!