Make WordPress Core


Ignore:
Timestamp:
09/29/2022 10:07:34 AM (3 years ago)
Author:
spacedmonkey
Message:

Query: Save excessive cache add and sets in WP_Query.

In [53941] database query caching was added to WP_Query. However on sites with persistent object caching enabled, this resulted in a high number of unnecessary cache set and adds being run on every request. Caches are not set, if the query cache already exists and is cached. Replace usage of update_post_caches with _prime_post_caches to ensure that only posts that are not in cache are primed.

Props spacedmonkey, peterwilsoncc, mukesh27.
See #22176.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-query.php

    r54133 r54352  
    31003100            }
    31013101
    3102             $cache_key = "wp_query:$key:$last_changed";
    3103 
     3102            $cache_key   = "wp_query:$key:$last_changed";
     3103            $cache_found = false;
    31043104            if ( null === $this->posts ) {
    3105                 $cached_results = wp_cache_get( $cache_key, 'posts' );
     3105                $cached_results = wp_cache_get( $cache_key, 'posts', false, $cache_found );
    31063106
    31073107                if ( $cached_results ) {
     
    32573257        }
    32583258
    3259         if ( $q['cache_results'] && $id_query_is_cacheable ) {
     3259        if ( $q['cache_results'] && $id_query_is_cacheable && ! $cache_found ) {
    32603260            $post_ids = wp_list_pluck( $this->posts, 'ID' );
    32613261
     
    34563456
    34573457            if ( $q['cache_results'] ) {
    3458                 update_post_caches( $this->posts, $post_type, $q['update_post_term_cache'], $q['update_post_meta_cache'] );
     3458                $post_ids = wp_list_pluck( $this->posts, 'ID' );
     3459                _prime_post_caches( $post_ids, $q['update_post_term_cache'], $q['update_post_meta_cache'] );
    34593460            }
    34603461
Note: See TracChangeset for help on using the changeset viewer.