web-dev-qa-db-fra.com

Champs personnalisés avancés - Efficacité de la requête

À des fins de test, j'ai édité page.php pour n'avoir rien d'autre que:

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

J'ai supprimé get_header, get_footer et seuls les plug-ins ACF sont activés car je suis encore au début du développement et je fais quelques tests initiaux. Lorsque je consulte la page sans appeler get_fields, il signale 9 requêtes mais si je visite la page avec get_fields, il passe à 72 requêtes. Il semble que cela ne devrait se faire que par 1 ou 2 requêtes ... pas 63.

Les requêtes sont signalées à l'aide de:

get_num_queries();

Résultats de l'appel get_options:

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])

Devrais-je m'inquiéter à ce sujet?

3
Nate

Il existe plusieurs raisons pour lesquelles cela génère plus de requêtes que prévu.

En premier lieu, ACF stocke les champs sous forme de deux données distinctes: une partie contient des informations sur le champ, les paramètres que vous avez sélectionnés, le formatage de la sortie, etc., et l’autre partie contient la valeur réelle affectée à ce champ. Vous avez donc une requête supplémentaire par champ - les données du champ plus les métadonnées du champ.

L'autre raison est liée au type de champs que vous avez et à la manière dont vous avez défini les options de formatage. Par exemple, les champs d’image semblent avoir la possibilité de charger l’objet image sélectionné. Cela signifie que, pour chaque référence d'image, ACF doit alors interroger les URL d'image de pièce jointe et les métadonnées, ce qui génère des requêtes supplémentaires pour chaque image.

Devriez-vous vous en préoccuper?

Tout d'abord, il convient de noter que la documentation d'ACF recommande de ne pas utiliser get_fields si vous connaissez les noms de champs et/ou n'utilisez pas toutes ces données à chaque chargement de page, car la fonction utilise une requête inefficace LIKE pour rechercher tous les noms de champs. .

Si les performances deviennent un problème, vous pouvez procéder de différentes manières: 1. utiliser un plug-in de cache pour réduire la charge, et/ou 2. mettre en cache les données vous-même quand elles changent. Décrochez l'action acf/save_post et enregistrez toutes vos données sous forme de tableau dans une seule option. Vous pouvez ensuite tout charger avec une seule requête get_option au niveau du serveur frontal.

8
Milo