2017-10-27 3 views
0

Wenn unser Projekt in REST basierte, gab es eine Antwortzeit von 200 ms ~ Wenn das Projekt in GraphQL geändert wurde.Graphql geschachtelte Abfrage ist extrem langsam

Da jeder Knoten versucht, aufzulösen, und nach der Auflösung, löst ihre Unterentität ebenfalls auf. Ursache für eine extrem hohe Latenz ist die Reaktionszeit - 11 Sekunden!

Was ich getan habe, versucht, alle benötigten Informationen, einschließlich aller Untereinheiten, zu ziehen und dieses riesige Objekt aus dem Abfrage-Resolver zu lösen.

die Reaktionszeit auf 800 ms reduziert.

ABER, die Resolver der Sub-Entitäten sind immer noch passiert! (Ich musste sie für diesen Test schließen). Wie kann ich sie in einigen Fällen abschalten?

Gibt es eine andere Möglichkeit, dies zu lösen?

Antwort

0

Es klingt, als ob Sie die zugehörigen Daten für jedes Feld nur abrufen möchten, wenn die Eigenschaft für das übergeordnete Objekt nicht definiert ist. Also, wenn Sie Resolver sieht wie folgt aus:

foos ({ id }, args, context) { 
    return getFoos(id) 
} 

nur den Anruf tätigen, die Ihre Daten bedingt, wie diese abruft:

foos ({ id, foos }, args, context) { 
    return foos ? foos : getFoos(id) 
} 
+0

Danke, ich werde es versuchen. Gibt es eine Chance, dass Sie irgendwelche Rezepte kennen, wie Sie die Latenz der graphql-Abfrage senken können? –