API:Caching data

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:Caching data and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Türkçe • ‎français • ‎русский • ‎ไทย • ‎中文 • ‎日本語 • ‎한국어

= Cache vom Client steuern

Das HTTP-Protokoll erlaubt es zu steuern, wie Browser und Internetproxys Inhalte im Cache speichern, durch verschiedene Werte, die im Cache-Control Header angegeben sind. (Dies funktioniert nur bei GET-Anfragen.) Die API erlaubt dem Client, zwei dieser Werte zu setzen, max-age und s-maxage, über API parameters maxage und smaxage.

maxage sagt dem Browser, wie lange die Antwort im Cache behalten werden soll (in Sekunden). smaxage tut das Gleiche für geteilte Proxys. In der Praxis wird Letzteres für gewöhnlich dafür benutzt, den Reverse Proxy auf der Server-Seite anzuweisen (so wie bei Wikimedias Varnish ).

Fehler werden nie im Cache gespeichert. Benutzerspezifische Antworten werden als Cache-Control: private markiert, sodass der Browser sie im Cache speichert, nicht aber öffentliche Proxys. Momentan benutzt die API standardmäßig die Spracheinstellung des eingeloggten Nutzers, also sind Antworten an eingeloggte Nutzer immer privat. Das kann vermieden werden durch Einsetzen der uselang=content API-Parameter (T97096).

= Verbesserung der Cache-Trefferrate

Eine Anfrage wird nur vom Cache bedient, wenn die exakte URL im Cache gespeichert wurde. (Wenn man z.B. die gleiche Anfrage mit maxage=1800 stellt und dann mit maxage=3600, wird die zweite nicht den Cache-Eintrag der ersten benutzen können, weil der unterschiedliche Maxage-Prameter die URL verändert.) Wenn man eine Liste von Seiten als Parameter übergibt, kann man die Cache-Trefferrate verbessern, indem man sie sortiert und dedupliziert.

Cache von einem API-Modul aus steuern

Das Speichern im Cache wird durch die ApiMain::setCache*-Methoden bestimmt. Im Normalfall ist das Speichern im Cache nur relevant in den query -Submodulen, die stattdessen die getCacheMode-Methode benutzen sollten, die sie von ApiQueryBase erben.