web-dev-qa-db-ja.com

ランダム投稿が順序付けられたときのパフォーマンスのためのWP_Queryの改善

私は私のquery_postsコードについての質問をした後私は新しいクエリを作りました...あなたたちはそれほど素晴らしいとは思わなかったので、私はそれを変えることにしました。

私はこれを作りました:

$page = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$Rand = new WP_Query("showposts=10&orderby=Rand&paged=$page"); 
while($Rand->have_posts()) : $Rand->the_post();

私の質問は、どうすればこれを改善できますか?

配列を使うほうがいいでしょうか。それで、同じコード、配列を持つかどうか?

とてもこんな感じ:

$Rand = new WP_Query( array(
    'showposts' => '10',
    'orderby' => Rand
) );

これによりパフォーマンスが向上しますか?

そして私は追加について何か読んだ:

'update_post_meta_cache' => false

用語が使用されない場合にパフォーマンスを向上させるため。私の質問:とにかく用語は何ですか?彼らはこれでタグやカテゴリを言っていますか?

編集:

function random_posts( $query ) {
    if ( $query->is_home() && !$query->is_paged() && $query->is_main_query() ) {
        $query->set( 'orderby', 'Rand' );
    }
}

これを使うとどうなりますか? WP_Queryを変更する必要がありますか、それとも削除する必要がありますか。 pre_get_postsが実際に何をするのかわかりません。

1
Johan

Orderby Randの問題は、ほとんどの設定でデータベースがすべての投稿をメモリにロードし、それからそれらをランダムに並べ替え、そしてあなたが求めたものを返すということです。それは、クエリを非常に遅く/高価にするということです。

またはい、用語は個々のカテゴリとタグです。ここで、カテゴリは分類法であり、「開発」カテゴリはその分類法の用語です。

最後に、最初のコードスニペットは、ページテンプレートを使用しているか、ページに表示されている内容を上書きしようとしていることを意味します。これは、メインのクエリを破棄して2番目のクエリを起動するため、不適切です。最初のクエリのコストはまだ発生しますが、それは破棄されるので時間の無駄です。これがquery_postsが有害と見なされている理由であり、それをカスタムのWP_Queryループで置き換えてもそれは解決されません。代わりにpre_get_postsを使用してメインのクエリを傍受して変更することを検討してください。

2
Tom J Nowell