wake-up-neo.com

Verbesserung der Leistung von WP_Query, wenn zufällige Posts sortiert werden

Ich habe eine neue Abfrage durchgeführt, nachdem ich eine Frage zu meinem query_posts-Code gestellt habe. Ihr fandet das nicht toll, also habe ich beschlossen, das zu ändern.

Ich habe das gemacht:

$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();

Meine Frage ist: Wie kann ich das verbessern?

Ist es nicht besser, ein Array zu verwenden? Also der gleiche Code, mit oder ohne Array?

Also so:

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

Würde das meine Leistung verbessern?

Und ich habe etwas über das Hinzufügen gelesen:

'update_post_meta_cache' => false

Verbesserung der Leistung, wenn Begriffe nicht verwendet werden. Meine Frage: Was sind eigentlich Begriffe? Versuchen sie damit Tags und/oder Kategorien zu sagen?

Bearbeiten:

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

Was wäre, wenn ich das nutzen würde? Muss ich meine WP_Query ändern oder muss ich sie entfernen? Ich verstehe nicht, was pre_get_posts tatsächlich tut.

1
Johan

Das Problem bei orderby Rand ist, dass bei den meisten Setups die Datenbank alle Posts in den Speicher lädt, sie dann zufällig sortiert und zurückgibt, wonach Sie gefragt haben. Es ist das Laden in den Speicher, das die Abfrage super langsam/teuer macht

Ja, Begriffe sind auch einzelne Kategorien und Tags, wobei Kategorie eine Taxonomie ist und die Kategorie „Entwicklung“ ein Begriff in dieser Taxonomie ist.

Schließlich impliziert Ihr anfänglicher Codeausschnitt, dass Sie eine Seitenvorlage verwenden oder versuchen, die auf der Seite angezeigten Informationen zu überschreiben. Dies ist schlecht, da die Hauptabfrage verworfen und eine zweite Abfrage gestartet wird. Die Kosten für die erste Abfrage fallen immer noch an, werden jedoch verworfen, sodass Zeitverschwendung entsteht. Aus diesem Grund wird query_posts als schädlich eingestuft. Das Ersetzen durch eine benutzerdefinierte WP_Query-Schleife behebt das nicht. Verwenden Sie stattdessen pre_get_posts, um die Hauptabfrage abzufangen und zu ändern

2
Tom J Nowell