Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(graphcache) - Replace buildClientSchema with lean implementation #1189

Merged
merged 10 commits into from
Dec 3, 2020

Conversation

kitten
Copy link
Member

@kitten kitten commented Dec 3, 2020

Summary

Our largest impact on @urql/exchange-graphcache is our usage of graphql/utilities/buildClientSchema which uses GraphQLSchema and other heavy implementations, which are basically server-side implementations with a lot of invariants. Given that we know that with @urql/introspection and other introspection methods the result can be trusted we don't even need any of the strict validation of buildClientSchema and what it pulls in.

Furthmore, we don't need any of the graphql/type/definition types, e.g. GraphQLObjectType and helpers like isObjectType if we transform the client schema to a format that is just good enough for our purposes.

This change increases @urql/exchange-graphcache's size slightly from 6.74kB gzip to 6.93kB gzip. However, the impact on what's pulled in from graphql is significant and we save in -9.61kB gzip (up to; lowest, 8.53kB). This makes a net impact of -9.42kB gzip

Set of changes

  • Reimplement buildClientSchema and replace GraphQLSchema types
  • Started to drill down buildClientSchema to what's necessary, but then transitioned to just using string-based schema structure
  • Update store.ts and schemaPredicates.ts to use new implementation

No unit tests had to be updated, which is encouraging.
The only remaining usage of graphql compared to @urql/core is valueFromASTUntyped

@changeset-bot
Copy link

changeset-bot bot commented Dec 3, 2020

🦋 Changeset detected

Latest commit: 936721e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@urql/exchange-graphcache Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@kitten kitten force-pushed the refactor/build-client-schema branch from cde88eb to b481ba7 Compare December 3, 2020 06:20
@kitten kitten force-pushed the refactor/build-client-schema branch from b481ba7 to ee0163b Compare December 3, 2020 06:25
@kitten kitten force-pushed the refactor/build-client-schema branch from 43b1b6c to a7e183a Compare December 3, 2020 07:32
@kitten kitten changed the title RFC: (graphcache) - Replace GraphQLSchema with custom implementation (graphcache) - Replace buildClientSchema with lean implementation Dec 3, 2020
@kitten kitten marked this pull request as ready for review December 3, 2020 07:47
Copy link
Collaborator

@JoviDeCroock JoviDeCroock left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work, wooooooooow

@kitten kitten merged commit 4ded936 into main Dec 3, 2020
@kitten kitten deleted the refactor/build-client-schema branch December 3, 2020 09:11
@github-actions github-actions bot mentioned this pull request Dec 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants