Objekt-Cache + Abfrage-Batching — Unternehmensleistung | Field Forge - Benutzerdefinierte Felder, gebaut für Geschwindigkeit
Herunterladen Anmelden

Objekt-Cache + Abfrage-Batching — Unternehmensleistung

Grundlagen des WordPress-Objekt-Caches

Die wp_cache_*-Funktionen von WordPress bieten eine Cache-Schicht, die zwischen Ihrem Code und der Datenbank sitzt. Standardmäßig verwendet WordPress einen speicherinternen Cache pro Anfrage (der am Ende jeder Anfrage gelöscht wird). Mit einem persistenten Objekt-Cache-Backend wie Redis oder Memcached überlebt der Cache zwischen den Anfragen — nachfolgende Seitenaufrufe greifen auf den Cache zu, anstatt die Datenbank zu kontaktieren.

Auf einer stark frequentierten Seite mit Redis:

  • Erster Seitenaufruf: Abruf aus der Datenbank, Speicherung in Redis
  • Zweiter Seitenaufruf (gleiche Daten): greift auf Redis zu, überspringt die Datenbank vollständig
  • Dritter Seitenaufruf: greift auf Redis zu

Für leseintensive Arbeitslasten ist dies eine 10–100-fache Leistungssteigerung.

Field Forge und Objekt-Cache

Jeder Feldwert, der in Field Forge gelesen wird, durchläuft den Objekt-Cache:

“`php // Innerhalb der get_field()-Implementierung von Field Forge (vereinfacht) $cached = wp_cache_get($cache_key, ‘fieldforge’); if ($cached !== false) { return $cached; }

$value = $this->fetch_from_database($post_id, $field_name); wp_cache_set($cache_key, $value, ‘fieldforge’, 3600); return $value; “`

  • Cache-Schlüssel-Formatfieldforge:{post_id}:{field_name}
  • Cache-Gruppefieldforge (getrennt von anderen Plugins)
  • Ablauf — 1 Stunde Standard, konfigurierbar über Filter
  • Cache-Fehlerbehandlung — fällt auf Datenbankabfrage zurück, speichert dann das Ergebnis

Cache-Invalidierung

Wenn ein Feldwert aktualisiert oder gelöscht wird, invalidiert Field Forge automatisch die relevanten Cache-Einträge:

php // Innerhalb von update_field() (vereinfacht) $this->save_to_database($post_id, $field_name, $value); wp_cache_delete("fieldforge:{$post_id}:{$field_name}", 'fieldforge');

Die Invalidierung ist:

  • Unmittelbar — beim Speichern wird der alte Cache-Eintrag gelöscht
  • Präzise — nur der spezifische Feld-Cache wird invalidiert, nicht der gesamte Post
  • Hooked — Plugins können benutzerdefinierte Invalidierungslogik über den fieldforge/cache/invalidate-Hook hinzufügen

Unterstützte Cache-Backends

Field Forge funktioniert mit jedem WordPress-Objekt-Cache-Backend:

Redis

Am häufigsten für verwaltetes WordPress-Hosting. Kostenlose Plugins: “Redis Object Cache” oder “W3 Total Cache” mit aktiviertem Redis. Bietet persistente Caching über Anfragen hinweg.

Memcached

Älter, aber immer noch unterstützt. Plugins: “Memcached” oder “W3 Total Cache.”

APCu

Einzelserver-Caching, das schneller ist als Redis/Memcached für weniger frequentierte Seiten (kein Netzwerk-Hops). Plugins: “APCu Object Cache.”

Standard-Speicher-Cache

Wenn kein persistentes Objekt-Cache-Backend installiert ist, fällt Field Forge auf den Standard-Speicher-Cache von WordPress zurück. Caching findet weiterhin innerhalb eines einzelnen Seitenaufrufs statt, jedoch nicht zwischen Anfragen. Funktioniert überall, null Konfiguration.

Batch-Laden

Für Archivseiten und Listenansichten, in denen Sie viele Beiträge gleichzeitig rendern, bietet Field Forge eine batch_load()-API, die benutzerdefinierte Felder für mehrere Beiträge in einer einzigen SQL-Abfrage abruft:

“`php $post_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; FieldForge::batch_load($post_ids);

// Alle nachfolgenden get_field()-Aufrufe für diese Post-IDs greifen auf den Cache zu foreach ($post_ids as $id) { $hero_title = get_field(‘hero_title’, $id); // Cache-Hit $hero_image = get_field(‘hero_image’, $id); // Cache-Hit } “`

Ohne batch_load() würden oben 20 separate SQL-Abfragen ausgeführt (10 Beiträge × 2 Felder jeweils). Mit Batch-Laden ist es 1 Abfrage.

Automatisches Vorladen

Field Forge greift in den the_posts-Filter von WordPress ein, um das Batch-Laden automatisch bei jeder Abfrage auszuführen, die mehrere Beiträge zurückgibt:

php // Interner Hook von Field Forge add_filter('the_posts', function($posts) { if (!empty($posts)) { $post_ids = wp_list_pluck($posts, 'ID'); FieldForge::batch_load($post_ids); } return $posts; });

Archivseiten, Suchergebnisse, Kategorienlisten und REST-API-Listenendpunkte profitieren automatisch. Keine Codeänderungen in Ihrem Theme erforderlich.

Explizites Batch-Laden für benutzerdefinierte Abfragen

Für WP_Query-Aufrufe in benutzerdefinierten Vorlagen können Sie nach der Abfrage explizit Batch-Laden:

“`php $query = new WP_Query([ ‘post_type’ => ‘product’, ‘posts_per_page’ => 30, ‘category_name’ => ‘featured’, ]);

// Batch-Laden benutzerdefinierter Felder für alle 30 Produkte in einer Abfrage if ($query->have_posts()) { $post_ids = wp_list_pluck($query->posts, ‘ID’); FieldForge::batch_load($post_ids); }

// Jetzt wird die Schleife nur bei Cache-Hits gerendert while ($query->have_posts()) : $query->the_post(); $price = get_field(‘price’); // Cache-Hit $sku = get_field(‘sku’); // Cache-Hit $features = get_field(‘features’); // Cache-Hit endwhile; “`

Leistungsvergleich

Auf einer Testseite mit 10.000 Beiträgen, 15 benutzerdefinierten Feldern pro Beitrag:

Ohne Objekt-Cache

Aktion Zeit
Einzelner Beitrag Seitenaufruf 45ms benutzerdefinierte Feldabfragen
Archiv (20 Beiträge) 840ms benutzerdefinierte Feldabfragen (N+1)
WooCommerce-Kategorie (30 Produkte) 1.260ms

Mit Redis-Objekt-Cache (warmer Cache)

Aktion Zeit
Einzelner Beitrag Seitenaufruf 3ms (Cache-Hits)
Archiv (20 Beiträge) 12ms (Cache-Hits)
WooCommerce-Kategorie (30 Produkte) 18ms

Mit Redis-Objekt-Cache + batch_load bei kaltem Cache

Aktion Zeit
Einzelner Beitrag Seitenaufruf 12ms (1 Abfrage + Cache befüllen)
Archiv (20 Beiträge) 95ms (1 Batch-Abfrage + Cache befüllen)
WooCommerce-Kategorie (30 Produkte) 142ms (1 Batch-Abfrage + Cache befüllen)

Die Kombination aus Objekt-Cache und Batch-Laden ist dramatisch auf stark frequentierten Seiten.

Überwachung der Cache-Leistung

Field Forge bietet WP-CLI-Befehle zur Überwachung der Cache-Leistung:

“`bash

Cache-Statistiken anzeigen

wp fieldforge cache stats

Ausgabe:

Cache-Hits: 94,3%

Cache-Fehler: 5,7%

Durchschnittliche Trefferzeit: 0,2ms

Durchschnittliche Fehlerzeit: 8ms

“`

Für Seiten, bei denen die Cache-Hit-Rate niedrig ist (unter 80%), untersuchen Sie:

  • Funktioniert das persistente Cache-Backend tatsächlich?
  • Ist die Cache-Invalidierung zu aggressiv (Löschen bei jedem Speichern)?
  • Sind Beitragstypen / Feldgruppen korrekt konfiguriert?

Filteranpassung

Cache-Ablauf ändern

php add_filter('fieldforge/cache/expiration', function($seconds) { return DAY_IN_SECONDS; // Cache für 24 Stunden });

Caching für spezifische Feldgruppen deaktivieren

php add_filter('fieldforge/cache/should_cache', function($should_cache, $field_group) { if ($field_group === 'frequently-changing-group') { return false; } return $should_cache; }, 10, 2);

Benutzerdefinierte Invalidierungslogik

php add_action('fieldforge/cache/invalidate', function($post_id, $field_name) { // Auch verwandte Daten invalidieren wp_cache_delete("my_custom_cache:{$post_id}", 'my_plugin'); }, 10, 2);


Bereit für die Leistung von benutzerdefinierten Feldern auf Unternehmensniveau?

Field Forge erhalten — ab $35/Jahr →

Die Integration des Objekt-Caches und das Batch-Laden sind in jeder Version von Field Forge enthalten, einschließlich der kostenlosen.

Forge KI-Assistent Online

Hallo! Ich bin der Field Forge KI-Assistent. Fragen Sie mich alles über das Plugin — Einrichtung, Funktionen, Fehlerbehebung oder Entwicklung.

Gerade eben
Unterstützt von Forge KI · Dokumentation durchsuchen