web-dev-qa-db-ja.com

データベースキャッシュを増やすフラグメントキャッシュ

ここで説明されているテクニックを使ってワードプレスサイトでフラグメントキャッシングを実装している間: http://css-tricks.com/wordpress-fragment-caching-revisited/ /私はそれが実際にクエリを増やすように思われることを見つけました。

私は今、ページ上の多くのフラグメントをキャッシュしています、そして(私のローカル環境で)私は0.764秒で294のクエリを得ます(get_num_queries()timer_stop(0)で計算されます)。

私がキャッシュしたスニペットの1つはメニューです。フラグメントキャッシュを削除すると、0.736秒で292回のクエリが発生します。

フラグメント検索からフラグメントキャッシュを削除した場合:0.862秒で290回のクエリ。

さらにクエリを削除すると、0.783秒で287クエリになります。

だから、ここで何が起こっているの?フラグメントキャッシュは確実に機能していますが、プラスの効果がありますか?また、実際にフラグメントキャッシュを使用しない場合よりも多くのクエリを使用しても大丈夫ですか?

functions.phpには、

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;
}

私の投稿ページ

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

私のメニューで:

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

デフォルトでwp_optionsテーブルにデータを格納するように動作する一時的なAPIを使用しています。つまり、トランジェントを設定してトランジェントを取得するために、追加のデータベースクエリが実行されます。あなたのコードでは、一時的なものが存在し、それが有効であるときに、2回目以降の訪問でログインしていないユーザーのためにクエリの数が少なくなるはずです。

永続キャッシュプラグインを使用する場合(または独自に永続キャッシュを設定する場合)、一時APIは WP_Object_Cache を使用し、キャッシュされたデータをデータベースではなくメモリに格納できるため、余分なデータベースクエリはありません。 。

要約:wp_cache関数を使用するとキャッシュされたデータがメモリに保存され、デフォルトでは永続的ではありません。一方、一時APIは常に永続的であり、デフォルトでデータベースを使用します。永続キャッシュを設定した場合、一時APIと WP_Object_Cache は一時APIと同じ結果を返します WP_Object_Cache

2
cybmeta