it-swarm.com.de

Erweiterte benutzerdefinierte Felder - Abfrageeffizienz

Zu Testzwecken habe ich page.php so bearbeitet, dass nichts anderes als:

<?php while ( have_posts() ) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php $site_options = get_fields('options'); ?>
<?php endwhile; ?>

Ich habe get_header und get_footer entfernt und nur ACF-Plugins aktiviert, da ich noch in der frühen Entwicklungsphase bin und einige erste Tests durchführe. Wenn ich die Seite betrachte, ohne get_fields aufzurufen, werden 9 Abfragen gemeldet, aber wenn ich die Seite mit get_fields besuche, werden 72 Abfragen angezeigt. Es scheint, dass nur 1 oder 2 Abfragen stoßen sollten ... nicht 63.

Abfragen werden gemeldet mit:

get_num_queries();

Ergebnisse des get_options-Aufrufs:

Array(
[main_ad_-_image] => Array
    (
        [id] => 25
        [alt] => TEST
        [title] => lg-social_media
        [caption] => 
        [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
        [caption] => 
        [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
        [caption] => 
        [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
        [caption] => 
        [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
        [caption] => 
        [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 protected])

Sollte ich mir darüber Sorgen machen?

3
Nate

Es gibt mehrere Gründe, warum dies mehr Abfragen erzeugt, als Sie erwarten.

Zunächst speichert ACF Felder als zwei unterschiedliche Daten - ein Teil enthält Informationen zum Feld, zu den von Ihnen ausgewählten Einstellungen, zum Formatieren der Ausgabe usw. und der andere Teil enthält den tatsächlichen Wert, der diesem Feld zugewiesen ist. Genau dort haben Sie also eine zusätzliche Abfrage pro Feld - die Felddaten plus die Metadaten des Feldes.

Der andere Grund hängt mit der Art der Felder zusammen, die Sie haben, und wie Sie die Formatierungsoptionen festgelegt haben. In den Bildfeldern wird beispielsweise die Option angezeigt, das ausgewählte Bildobjekt zu laden. Das bedeutet, dass ACF für jede Bildreferenz nach URLs für angehängte Bilder und Metadaten fragen muss, wodurch zusätzliche Abfragen für jedes Bild erstellt werden.

Sollten Sie darüber besorgt sein?

Erstens sollte beachtet werden, dass die Dokumentation von ACF die Verwendung von get_fields nicht empfiehlt, wenn Sie die Feldnamen kennen und/oder nicht alle diese Daten bei jedem Seitenaufruf verwenden, da die Funktion eine ineffiziente LIKE-Abfrage verwendet, um alle Feldnamen zu finden .

Wenn die Leistung zu einem Problem wird, können Sie Folgendes tun: 1. Verwenden Sie ein Cache-Plugin, um die Auslastung zu verringern, und/oder 2. Zwischenspeichern Sie die Daten selbst, wenn sie sich ändern. Hängen Sie die Aktion acf/save_post ein 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 im Front-End laden.

8
Milo