Campos personalizados avançados - Eficiência de consulta

3

Para fins de teste, eu editei page.php para não ter nada além de:

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

Eu removi get_header, get_footer e só tenho plug-ins de ACF ativados porque ainda estou adiantado no desenvolvimento e fazendo alguns testes iniciais. Quando visualizo a página sem chamar get_fields, ele reporta 9 consultas, mas se eu visitar a página com get_fields, ele saltará para 72 consultas. Parece que só deve bater por 1 ou 2 consultas ... não 63.

As consultas são relatadas usando:

get_num_queries();

Resultados da chamada 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@email.com)

Eu deveria estar preocupado com isso?

    
por Nate 06.03.2014 / 03:25

1 resposta

8

Existem algumas razões pelas quais isso gera mais consultas do que você espera.

Primeiro, o ACF armazena campos como duas partes distintas de dados - uma parte contém informações sobre o campo, quais configurações você selecionou, como formatar a saída, etc., e a outra parte contém o valor real atribuído a esse campo. Então, você tem uma consulta extra por campo - os dados do campo e os metadados do campo.

O outro motivo tem a ver com o tipo de campos que você tem e como você definiu as opções de formatação. Por exemplo, os campos da imagem parecem ter a opção de carregar o objeto de imagem selecionado. Isso significa que, para cada referência de imagem, o ACF precisa consultar URLs e metadados de imagens de anexos, o que produz consultas extras para cada imagem.

Você deve se preocupar com isso?

Primeiro, deve-se notar que a documentação do ACF recomenda contra o uso de get_fields se você souber os nomes dos campos e / ou não usar todos esses dados em cada carregamento de página, pois a função usa uma consulta LIKE ineficiente para encontrar todos os nomes de campo.

Se o desempenho se tornar um problema, há algumas coisas que você pode fazer: 1. usar um plug-in de cache para reduzir a carga e / ou 2. armazenar os dados em cache quando mudar. Anexe a ação acf/save_post e salve todos os seus dados como uma matriz em uma única opção. carregue tudo com uma única consulta get_option no front end.

    
por Milo 06.03.2014 / 04:20