Heim > Web-Frontend > CSS-Tutorial > Arbeiten mit GraphQL Caching

Arbeiten mit GraphQL Caching

Jennifer Aniston
Freigeben: 2025-03-19 09:36:14
Original
1000 Leute haben es durchsucht

Arbeiten mit GraphQL Caching

Analyse von GraphQL -Cache -Mechanismus: Brechen von Cache -Fehlern

Möglicherweise haben Sie von Dingen wie "GraphQL nicht unterstützt" oder "GraphQL kümmert sich nicht um das Caching" gehört. Dies ist für viele Menschen ein großes Problem. Aber das ist nicht der Fall. Das offizielle Dokument von GraphQL erwähnt eine Vielzahl von Caching -Technologien, was zeigt, dass sein Entwicklungsteam für das Caching und seine Leistungsvorteile von großer Bedeutung ist.

Dieser Artikel zielt darauf ab, die Beziehung zwischen GraphQL und Cache zu klären und unterschiedliche Caching -Techniken einzuführen und GraphQL -Abfragen mithilfe von Cache zu optimieren.

GraphQL Automatischer Caching -Mechanismus

Betrachten Sie die folgende Anfrage, um einen Beitrag und seinen Autor zu erhalten:

 Abfrage GetPost {
  Post (Slug: "Working-with-Graphql-Caching") {
    Ausweis
    Titel
    Autor {
      Ausweis
      Name
      Avatar
    }
  }
}
Nach dem Login kopieren

Das "Geheimnis" zur Implementierung des automatischen Caching von GraphQL ist das meta -Feld __typename , das von allen GraphQL -APIs bereitgestellt wird. Wie der Name schon sagt, gibt __typename den Typnamen des Objekts zurück. Dieses Feld kann sogar manuell zu einer vorhandenen Abfrage hinzugefügt werden, die die meisten GraphQL -Clients oder CDNs automatisch hinzufügen, z. B. URQL. Die vom Server empfangene Abfrage sieht möglicherweise so aus:

 Abfrage GetPost {
  Post (Slug: "Working-with-Graphql-Caching") {
    __Typename
    Ausweis
    Titel
    Autor {
      __Typename
      Ausweis
      Name
    }
  }
}
Nach dem Login kopieren

Die Antwort mit __typename ist wie folgt aussehen:

 {
  Daten: {
    __typename: "post",
    ID: 5,
    Titel: "Mit GraphQl Caching arbeiten",
    Autor: {
      __Typename: "Benutzer",
      ID: 1,
      Name: "Jamie Barton"
    }
  }
}
Nach dem Login kopieren

__typename ist der Schlüssel zum GraphQL -Cache, da wir die Ergebnisse zwischenspeichern und wissen, dass es Post ID 5 und Benutzer -ID 1 enthält.

Bibliotheken wie Apollo und Relais bieten auch ein bestimmtes Ausschnitt integriert für das automatische Zwischenspeichern. Da sie bereits wissen, was im Cache ist, können sie den Cache anstelle der Remote -API nutzen, um das zu erhalten, was der Client in der Abfrage anfordert.

Automatischer Ausfall -Cache

Angenommen, der Postautor verwendet editPost -Variante, um den Titel des Beitrags zu ändern:

 Mutation {
  editPost (Eingabe: {ID: 5, Titel: "Mit GraphQl Caching arbeiten"}) {
    Ausweis
    Titel
  }
}
Nach dem Login kopieren

Da der GraphQL -Client das Feld __typename automatisch hinzufügt, gibt das Ergebnis dieser Variante sofort den Cache mit, dass sich die Post -ID 5 geändert hat, und alle zwischen dem Beitrag enthaltenen Abfrageergebnisse müssen ungültig werden:

 {
  Daten: {
    __typename: "post",
    ID: 5,
    Titel: "Mit GraphQl Caching arbeiten"
  }
}
Nach dem Login kopieren

Wenn der Benutzer das nächste Mal die gleiche Abfrage sendet, erhält die Abfrage neue Daten aus der Quelle, anstatt abgelaufene Ergebnisse im Cache zu verwenden.

Normalisieren Sie den GraphQL -Cache

Viele GraphQL -Clients speichern nicht die gesamten Abfrageergebnisse. Stattdessen normalisieren sie zwischengespeicherte Daten in zwei Datenstrukturen: Einer verknüpft jedes Objekt mit seinen Daten (z. B. Post Nr. 5: {…}, Benutzer #1: {…} usw.).

In der Dokumentation von URQL zur Normalisierung von Caching oder Apollos "entmystifizierender Cache -Normalisierung" finden Sie spezifische Beispiele und Anwendungsfälle.

GraphQL Cache Edge Fall

Einer der Hauptkantenfälle, in denen GraphQL -Caches nicht automatisch behandelt werden können, ist die hinzugefügte Elemente in die Liste. Wenn createPost -Mutation den Cache durchläuft, weiß sie nicht, welche spezifische Liste das Element hinzufügen soll.

Die einfachste "Problemumgehung" ist es, den übergeordneten Typ in der Mutation abzufragen (falls vorhanden). In der folgenden Abfrage fragen wir beispielsweise die Community -Beziehung in der Post:

 Abfrage GetPost {
  Post (Slug: "Working-with-Graphql-Caching") {
    Ausweis
    Titel
    Autor {
      Ausweis
      Name
      Avatar
    }

    # Fragen Sie auch die Community des Beitrags an
    Gemeinschaft {
      Ausweis
      Name
    }
  }
}
Nach dem Login kopieren

Dann können wir die Community auch aus createPost -Variante abfragen und alle zwischengespeicherten Abfragenergebnisse, die die Community enthalten, ungültig machen:

 Mutation CreatePost {
  CreatePost (Eingabe: {...}) {
    Ausweis
    Titel

    # Auch die Community des Posts abfragen und damit ungültig machen
    Gemeinschaft {
      Ausweis
      Name
    }
  }
}
Nach dem Login kopieren

Obwohl sie nicht perfekt sind, sind typisierte Muster und __typename -Metafields die Schlüssel, um die GraphQL -API für das Zwischenspeichern großartig zu machen.

Möglicherweise denken Sie, dass all dies eine Stopgap -Lösung ist, und GraphQL unterstützt immer noch kein traditionelles Caching. Sie können sich nicht irren. Da GraphQL über Post -Anfragen ausgeführt wird, müssen Sie sich mit dem Anwendungsclient deinstallieren und die oben genannten "Tricks" verwenden, um den modernen Browser -Cache von GraphQL zu nutzen.

Dieser Ansatz ist jedoch nicht immer möglich und nicht der beste Weg, um Kunden -Caches zu verwalten. Für schwierigere Fälle erfordert der GraphQL-Client, dass Sie den Cache manuell aktualisieren müssen. Dienste wie GraphCDN bieten jedoch ein "serverartiges" Caching-Erlebnis und bieten auch eine manuelle Clearing-API, mit der Sie Folgendes für eine bessere Caching-Steuerung durchführen können:

 # Alle Vorkommen eines bestimmten Objekts reinigen
Mutation {
  PURGUSER (ID: [5])
}
Nach dem Login kopieren
 # Spülung durch Abfragenname
Mutation {
  _purgeQuery (Abfragen: [Listusers, ListPosts])
}
Nach dem Login kopieren
 # Alle Vorkommen eines Typs reinigen
Mutation {
  PURGUSER
}
Nach dem Login kopieren

Unabhängig davon, wo Sie den GraphCDN -Endpunkt verwenden, müssen Sie die Cache -Richtlinie nicht mehr in allen Client -Logik wie Mobile, Web usw. neu einstellen. Edge Caching macht Ihre API sehr schnell und verringert die Last, indem sie Caches zwischen Benutzern teilen und vom Client jedes Benutzers trennen.

Ich habe kürzlich GraphCDN in einem Projekt verwendet, das mir geholfen hat, die Cache -Konfiguration auf dem Client oder Server zu verarbeiten, sodass ich mein Projekt fortsetzen kann. Zum Beispiel könnte ich meinen Endpunkt durch GraphCDN ersetzen und die Komplexität der Abfragen (bald), die Analyse und mehr kostenlos erhalten.

Kümmert sich GraphQL also um das Caching? Natürlich kümmert es Sie! Es bietet nicht nur einige integrierte automatische Caching-Methoden, sondern viele GraphQL-Bibliotheken bieten andere Möglichkeiten zur Implementierung und Verwaltung von Caching.

Hoffentlich hilft Ihnen dieser Artikel dabei, den GraphQL -Caching -Mechanismus zu verstehen, und wie Sie ihn auf der Client -Seite implementieren und wie Sie CDN nutzen können, um die gesamte Arbeit zu erledigen. Mein Ziel ist es nicht, Sie davon zu überzeugen, GraphQL in all Ihren Projekten zu verwenden. Wenn Sie jedoch eine Abfragesprache und das Caching ein wichtiger Faktor sind, wissen Sie, dass GraphQL für diese Aufgabe vollkommen kompetent ist.

Das obige ist der detaillierte Inhalt vonArbeiten mit GraphQL Caching. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage