web-dev-qa-db-fra.com

Est-il judicieux d’attribuer les fonctions comme est_paged ()

En fait, c'est une question simple, mais je dois être sûr que l'affectation d'une variable pour le résultat d'une fonction peut aider à augmenter la vitesse d'un site, par exemple.

La fonction: if is_paged(){ $paged = 1; }

Le remplacement: if $paged == "1" .. then do - plutôt que d'utiliser la même fonction à plusieurs reprises

Le cache total W3 le cache probablement, mais parfois les utilisateurs accèdent à des pages qui ne sont pas mises en cache et je pense que cela pourrait augmenter la vitesse d'un site Web mon hypothèse est-elle correcte?

1
mashup

Ainsi, toutes les conditions de requête (is_paged, is_singular, etc.) ressemblent à ceci:

function is_paged() {
    global $wp_query;

    if ( ! isset( $wp_query ) ) {
        _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1' );
        return false;
    }

    return $wp_query->is_paged();
}

Globalisez $wp_query et appelez la méthode correspondante de l'objet WP_Query. Dans ce cas:

<?php
function is_paged() {
    return (bool) $this->is_paged;
}

La seule base de données que vous rencontrez date de la création de l'objet WP_Query, ce qui arrive quand même.

L'appel d'une fonction entraîne un coût, de même que l'utilisation d'une instruction if. Ces coûts liés au matériel actuel ne sont pas inquiétants.

Cela dit, si vous effectuez beaucoup de vérifications conditionnelles à l'aide de la même fonction, vous feriez probablement mieux d'évaluer le flux de contrôle de votre programme.

Quelque chose comme ça:

<?php
if(is_paged() && 1 == get_query_var('some_query_var'))
{
   // do stuff
}
else if(is_paged() && 2 == get_query_var('some_query_var'))
{
   // do other stuff
}

Pourrait devenir:

<?php
if(is_paged())
{
   switch(get_query_var('some_query_var'))
   {
      case 1:
          // do stuff
          break;
      case 2:
          // do stuff
          break;
      default:
          // do stuff
          break;
    }
}

Pour finir, je "mettrais" en cache les résultats des conditions (ou de tout autre appel de fonction, dans des limites raisonnables) au sein de la même fonction si vous en avez besoin plusieurs fois, vraiment besoin de persister de méthode en méthode.

Voici un exemple terrible qui (probablement) ne suit pas mon conseil ci-dessus.

<?php
function wpse65916_stuff()
{
    $paged = is_paged();

    if($paged)
    {
        // do stuff because paged
    }

    if($paged && /* some other condition */)
    {
        // do stuff
    }
}
2
chrisguitarguy

Non.

Les conditions de requête font partie du cache d'objets de WordPress et n'entraînent aucune ressource supplémentaire à l'appel.

1
Chip Bennett