get_post_meta verlangsamt das Laden meiner Seite (in einem Plugin)

Ich habe an diesem Projekt gearbeitet, bei dem ich Ereignisse (benutzerdefinierter Post-Typ) und eine ganze Menge Metadaten für jedes Ereignis laden muss. Das Problem besteht darin, dass die Ladezeiten für Seiten immer länger werden, wenn mehr und mehr Ereignisse hinzugefügt werden.

Am Anfang mit nur wenigen Ereignissen war das überhaupt kein Problem, aber jetzt, wo es mehr als 100 Ereignisse auf der Systemseite gibt, dauern Ladevorgänge bis zu 6 Sekunden, was zu lang ist.

Beispiel für das, was ich gerade mache: Zeige alle Ereignisse im System an (alles unten in einem Plugin) Ich lade alle Ereignisse mit get_posts und spezifiziere den benutzerdefinierten Post-Typ. Ich durchlaufe alle Posts und bekomme alle Metadaten mit get_post_meta in einem einzigen Aufruf.

Beim Testen, wo der Engpass war, fand ich heraus, dass die Ausführungszeit von get_post_meta von 4,5 Sekunden auf 14 ms gesunken ist. Ich testete auch, was passieren würde, wenn ich alle Metadaten wie get_post_meta($post->ID, "meta_value", true); separat get_post_meta($post->ID, "meta_value", true); : get_post_meta($post->ID, "meta_value", true);

Wenn ich eine Ansicht habe, wo ich nur ein paar Meta-Werte benötige, beschleunigt dies den process bis zu dem ich 20% der Ladezeit reduzieren könnte, aber wenn ich fast alles brauche, gab es keine Änderung der Ladezeiten.

Ich habe auch bemerkt, dass die Verwendung von get_post_custom in diesem Fall nicht wirklich hilft.

Nachdem man sich online get_posts hat (hier, Blogs, etc ..), haben Leute darauf hingewiesen, dass wenn man einen get_posts , alle Metadaten automatisch abgerufen und zwischengespeichert werden. Aber es scheint, dass dies nicht wahr ist, wenn ich mir die Ausführungszeit und die Anzahl der Abfragen ansehe, die verarbeitet werden.

Gibt es eine Möglichkeit, dies über PHP / MySQL weiter zu beschleunigen?

Eine Sache, an die ich dachte, war: Gibt es eine Möglichkeit, alle Posts und Metadaten für jeden Beitrag in einem einzigen Anruf zu erhalten. Aber ich hatte kein Glück, etwas online zu finden, das mir dabei helfen würde.

Solutions Collecting From Web of "get_post_meta verlangsamt das Laden meiner Seite (in einem Plugin)"

Sie sollten einen Objekt-Cache verwenden, der die Abfragen von get_post_meta definitiv beschleunigt, da sie zwischengespeichert werden, wenn die erste WP_Query (get_posts) ausgeführt wird.

Ich empfehle das Testen mit dem APC-Cache unter Verwendung des APC Object Cache Backends: https://wordpress.org/plugins/apc/

Legen Sie die Datei einfach in Ihren wp-content-Ordner und stellen Sie sicher, dass Sie die APC-Erweiterung verfügbar haben.