Erweiterte benutzerdefinierte Felder – Abfrageeffizienz

Zu Testzwecken habe ich page.php bearbeitet, um nichts anderes zu haben als:

 

Ich habe get_header, get_footer entfernt und nur ACF-Plugins aktiviert, da ich noch in der Entwicklungsphase bin und erste Tests durchführe. Wenn ich die Seite ohne Aufruf von get_fields betrachte, meldet sie 9 Abfragen, aber wenn ich die Seite mit get_fields besuche, springt sie zu 72 Abfragen. Es scheint so, als ob das nur um 1 oder 2 Anfragen gehen sollte … nicht 63.

Abfragen werden gemeldet mit:

 get_num_queries(); 

Ergebnisse von get_options aufrufen:

 Array( [main_ad_-_image] => Array ( [id] => 25 [alt] => TEST [title] => lg-social_media  => [description] => [mime_type] => image/png [url] => {urlhere} [width] => 460 [height] => 260 [sizes] => Array ( [thumbnail] => {urlhere}/wp-content/uploads/lg-social_media-150x150.png [thumbnail-width] => 150 [thumbnail-height] => 150 [medium] => {urlhere}/wp-content/uploads/lg-social_media-220x124.png [medium-width] => 220 [medium-height] => 124 [large] => {urlhere}/wp-content/uploads/lg-social_media.png [large-width] => 460 [large-height] => 260 ) ) [main_ad_-_url_type] => ext [main_ad_-_url] => www.google.com [small_ad_1_-_image] => Array ( [id] => 28 [alt] => Fake Text [title] => fake-text  => [description] => [mime_type] => image/png [url] => {urlhere}/wp-content/uploads/fake-text.png [width] => 220 [height] => 120 [sizes] => Array ( [thumbnail] => {urlhere}/wp-content/uploads/sm-fake-text-150x120.png [thumbnail-width] => 150 [thumbnail-height] => 120 [medium] => {urlhere}/wp-content/uploads/sm-fake-text.png [medium-width] => 220 [medium-height] => 120 [large] => {urlhere}/wp-content/uploads/sm-fake-text.png [large-width] => 220 [large-height] => 120 ) ) [small_ad_1_-_url_type] => ext [small_ad_2_-_image] => Array ( [id] => 30 [alt] => Fake Text 2 [title] => fake-text2  => [description] => [mime_type] => image/png [url] => {urlhere}/wp-content/uploads/fake-text2.png [width] => 220 [height] => 120 [sizes] => Array ( [thumbnail] => {urlhere}/wp-content/uploads/fake-text2-150x120.png [thumbnail-width] => 150 [thumbnail-height] => 120 [medium] => {urlhere}/wp-content/uploads/fake-text2.png [medium-width] => 220 [medium-height] => 120 [large] => {urlhere}/wp-content/uploads/fake-text2.png [large-width] => 220 [large-height] => 120 ) ) [small_ad_1_-_url] => www.google.com [main_ad_-_page] => {urlhere} [small_ad_2_-_url_type] => ext [small_ad_2_-_url] => www.google.com [small_ad_3_-_image] => Array ( [id] => 27 [alt] => Fake Text 3 [title] => fake-text3  => [description] => [mime_type] => image/png [url] => {urlhere}/wp-content/uploads/fake-text3.png [width] => 220 [height] => 120 [sizes] => Array ( [thumbnail] => {urlhere}/wp-content/uploads/fake-text3-150x120.png [thumbnail-width] => 150 [thumbnail-height] => 120 [medium] => {urlhere}/wp-content/uploads/fake-text3.png [medium-width] => 220 [medium-height] => 120 [large] => {urlhere}/wp-content/uploads/fake-text3.png [large-width] => 220 [large-height] => 120 ) ) [small_ad_3_-_url_type] => ext [small_ad_3_-_url] => www.google.com [small_ad_4_-_image] => Array ( [id] => 29 [alt] => Fake Text 4 [title] => fake-text4  => [description] => [mime_type] => image/png [url] => {urlhere}/wp-content/uploads/fake-text4.png [width] => 220 [height] => 120 [sizes] => Array ( [thumbnail] => {urlhere}/wp-content/uploads/fake-text4-150x120.png [thumbnail-width] => 150 [thumbnail-height] => 120 [medium] => {urlhere}/wp-content/uploads/fake-text4.png [medium-width] => 220 [medium-height] => 120 [large] => {urlhere}/wp-content/uploads/fake-text4.png [large-width] => 220 [large-height] => 120 ) ) [small_ad_4_-_url_type] => ext [small_ad_4_-_url] => www.google.com [facebook] => www.facebook.com [twitter] => twitter.com [youtube] => www.youtube.com [office_address] => text [office_address_-_google_url] => test [office_-_phone] => 1234567890 [office_-_800_#] => 8001234567 [office_-_email] => email@email.com) 

Sollte ich darüber besorgt sein?

Solutions Collecting From Web of "Erweiterte benutzerdefinierte Felder – Abfrageeffizienz"

Es gibt mehrere Gründe, warum dies mehr Abfragen generiert als erwartet.

Erstens speichert ACF Felder als zwei getrennte Datenelemente – ein Teil enthält Informationen über das Feld, welche Einstellungen Sie ausgewählt haben, wie Sie die Ausgabe formatieren usw., und der andere Teil enthält den tatsächlichen Wert, der diesem Feld zugewiesen ist. Also genau dort haben Sie eine zusätzliche Abfrage pro Feld – die Felddaten plus die Metadaten des Feldes.

Der andere Grund hat mit der Art der Felder zu tun, die Sie haben, und wie Sie die Formatierungsoptionen eingestellt haben. Zum Beispiel scheinen die Bildfelder die Option zu haben, das ausgewählte Bildobjekt zu laden. Das bedeutet, dass ACF dann für jede Bildreferenz nach Bild-URLs und Metadaten von Anhängen fragen muss, die zusätzliche Abfragen für jedes Bild erzeugen.

Sollten Sie darüber besorgt sein?

Zunächst sollte angemerkt werden, dass die Dokumentation von ACF die Verwendung von get_fields empfiehlt, wenn Sie die Feldnamen kennen und / oder nicht alle diese Daten bei jedem Laden der Seite verwenden, da die function eine ineffiziente LIKE Abfrage verwendet, um alle Feldnamen zu finden .

Wenn performance zu einem Problem wird, gibt es einige Dinge, die Sie tun können: 1. Verwenden Sie ein Cache-Plugin, um die Last zu reduzieren, und / oder 2. cachen Sie die Daten selbst, wenn sie sich ändern. acf/save_post Aktion acf/save_post und speichern Sie alle Ihre Daten als Array in einer einzigen Option. Anschließend können Sie alle Daten mit einer einzigen get_option Abfrage am Frontend laden.