web-dev-qa-db-fra.com

Fragment mettant en cache l'augmentation des requêtes de base de données

Lors de la mise en œuvre de la mise en cache de fragments sur un site WordPress à l’aide de la technique décrite ici: http://css-tricks.com/wordpress-fragment-caching-revisited/ / J’ai constaté qu’il semblait augmenter le nombre de requêtes.

J'ai maintenant mis en cache de nombreux fragments sur la page et (dans mon environnement local), je reçois 294 requêtes en 0.764 secondes (calculées avec get_num_queries() et timer_stop(0)).

Un extrait que j'ai mis en cache est le menu. Si j'en retire le fragment en cache, j'obtiens 292 requêtes en 0.736 secondes.

Si je supprime la mise en cache des fragments de ma recherche, à partir de: 290 requêtes en 0.862 secondes.

Et si je supprime plus de requêtes: 287 requêtes en 0.783 secondes.

Alors, qu'est-ce qui se passe ici? La mise en cache de fragments fonctionne, mais a-t-elle un effet positif? De plus, est-ce correct d'avoir plus de requêtes avec la mise en cache de fragments que sans?

Dans functions.php j'ai:

function fragment_cache($key, $ttl, $function) {
  if ( is_user_logged_in() ) {
    call_user_func($function);
    return;
  }
  $key = apply_filters('fragment_cache_prefix', 'fragment_cache_').$key;
  $output = get_transient($key);
  if ( empty($output) ) {
    ob_start();
    call_user_func($function);
    $output = ob_get_clean();
    set_transient($key, $output, $ttl);
  }
  echo $output;
}

Dans ma page de post

<?php fragment_cache('text' . $post->ID, WEEK_IN_SECONDS, function() {  ?>
    <?php the_sub_field('text'); ?>
<?php }); ?>

Dans mon menu:

<?php 
    fragment_cache('primary-nav', YEAR_IN_SECONDS, function() {
        wp_nav_menu( array( 'theme_location' => 'primary' ) );
    });
?>
4
alemur

Vous utilisez une API transitoire qui stocke les données sur la table wp_options par défaut. Cela signifie que des requêtes de base de données supplémentaires seront effectuées pour définir le transitoire et pour obtenir le transitoire. Avec votre code, le nombre de requêtes devrait être inférieur pour les utilisateurs non connectés lors de la deuxième visite et des visites suivantes lorsque le transitoire existe et qu'il est valide.

Si vous utilisez un plug-in de cache persistant (ou si vous configurez le cache persistant de votre propre chef), l'API transitoire utilisera WP_Object_Cache , permettant ainsi aux données mises en cache d'être stockées en mémoire au lieu de la base de données, de sorte qu'il n'y aura pas de requêtes supplémentaires.

Summary: l'utilisation des fonctions wp_cache stockera les données en cache dans la mémoire et celles-ci ne sont pas persistantes par défaut. D'autre part, l'API transitoire est toujours persistante et utilise la base de données par défaut. Si vous configurez le cache persistant, l'API transitoire et WP_Object_Cache renvoient les mêmes résultats, car l'API transitoire utilisera WP_Object_Cache .

2
cybmeta