Muster zur Performancesteigerung der GraphQL Anfragen (SaaS) #381
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.
In einer Query können beliebige "nested resources" mit abgefragt werden. Diese werden bisher jedoch im ActiveRecord scope nicht mit includes berücksichtigt, sodass für jeden Treffer zusätzliche SQL anfragen notwendig werden.
Pauschal immer alle möglichen Ressourcen zusätzlich zu laden ist jedoch auch keine Lösung.
Passend dafür wäre es also gut schon beim scope zu wissen welche Ressourcen zusätzlich benötigt werden. Hierfür kann "extras: [:lookahead]" verwendet werden. dies gibt dem Context zusätzliches Wissen mit, welches im Scope verwendet werden kann.
Beispielsweise wie hier um passende :includes an den scope ketten.
Durch das hinzuladen der weiteren Models sind dann weitere Besonderheiten zu beachten, wie hier zum Beispiel die klare Benennung der Sortierargumente, da diese nun nicht mehr eindeutig sind.
https://graphql-ruby.org/queries/lookahead.html
https://evilmartians.com/chronicles/how-to-graphql-with-ruby-rails-active-record-and-no-n-plus-one
context[:current_arguments][:lookahead].selections.map(&:name)
hat in diesem Beispiel dann folgende Werte:[:id, :title, :list_date, :data_provider, :dates, :addresses, :categories]