1unitedpower: Werte aus JSON weiterverwerten

Beitrag lesen

ich stelle über c3.js ein Chart her, wobei ich über JSON die Daten empfange. Diese würde ich gerne außerhalb des Charts auch nochmal tabellarisch darstellen. Jetzt wärs ja kein Problem, die Daten hierzu doppelt abzufragen. Aber ich würde gerne meine DB entlasten und wenn der Client eh schonmal die ganzen Werte hat, müßte man die doch auch mehrfach clientseitig verwenden können, oder?

Ganz allgemein gesprochen möchtest du Zwischenergebnisse wiederverwenden ohne die gesamte Berechnung, die dafür notwendig war, wiederholen zu müssen. Unter Programmierern nennt man diesen Zwischenspeicher auch Cache. In deinem geschildeten Fall gibt es gleich mehrere Einhängepunkte dafür, die auch in Kombination funktionieren.

Zunächst könntenst du die Antwort deines Server-Skriptes zwischenspeichern und nachfolgende Anfragen an die selbe JSON-Schnittstelle mit der Antwort aus dem Cache beantworten. Dort kannst du auch am besten entscheiden, wann eine zwischengespeicherte Antwort ungültig wird und neu berechnet werden muss.

Weiterhin könntest du den HTTP-Client-Cache nutzen. Dazu teilst du dem Browser in den Header-Informationen deiner HTTP-Antwort mit, dass die Seite für eine bestimmte Dauer gecacht werden darf. Der Browser übernimmt dann selbst die Verwaltung des Caches.

Als weitere Möglichkeit könntest du einen Cache in deinem clientseitigen JavaScript implementieren. Ein ganz einfacherer Cache (ohne Invalidierung ungültig gewordener Zwischenergebnisse) könnte so aussehen:

const getData = ((cache = new Map()) => (url) => {
   if (!cache.has(url)){
      cache.set(url,fetch(url));
   }
   return cache.get(url);
})();

Wiederkehrende Aufrufe mit der selben URL würden dann keine neuen HTTP-Anfragen absetzen, sondern aus die Antwort des ersten Aufrufs wiederverwenden:

getData('/api/version'); // Anfrage wird abgesetzt
getData('/api/version'); // Ergebnis wird aus dem Cache geladen