Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
04/15/2015 10:44:55 PM (9 years ago)
Author:
r-a-y
Message:

Messages: Cache calls to BP_Messages_Thread class.

This commit:

  • Introduces static method - BP_Messages_Thread::get_messages() - caches fetching messages by thread ID and introduces the 'bp_messages_threads' cache group.
  • Converts BP_Messages_Thread::check_access() and BP_Messages_Thread::is_valid() methods from using direct DB queries to reference the cache.
  • Includes unit tests.
  • Consolidates cache clearing functions in bp-messages-cache.php.

This handles the majority of uncached message DB queries. For the inbox
page, if there are 10 message threads in the loop, we save 20 DB queries.
On a single message thread, we save 5 DB queries.

Fixes #6221.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-messages/bp-messages-cache.php

    r9482 r9753  
    4747
    4848/**
    49  * Clear unread count cache for each recipient after a message is sent.
     49 * Clear message cache after a message is saved.
    5050 *
    5151 * @since BuddyPress (2.0.0)
     
    5353 * @param BP_Messages_Message $message
    5454 */
    55 function bp_messages_clear_unread_count_cache_on_message_save( BP_Messages_Message $message ) {
     55function bp_messages_clear_cache_on_message_save( BP_Messages_Message $message ) {
     56    // Delete thread cache
     57    wp_cache_delete( $message->thread_id, 'bp_messages_threads' );
     58
     59    // Delete unread count for each recipient
    5660    foreach ( (array) $message->recipients as $recipient ) {
    5761        wp_cache_delete( $recipient->user_id, 'bp_messages_unread_count' );
    5862    }
     63
     64    // Delete thread recipient cache
     65    wp_cache_delete( 'thread_recipients_' . $message->thread_id, 'bp_messages' );
    5966}
    60 add_action( 'messages_message_after_save', 'bp_messages_clear_unread_count_cache_on_message_save' );
     67add_action( 'messages_message_after_save', 'bp_messages_clear_cache_on_message_save' );
    6168
    6269/**
    63  * Clear unread count cache for the logged-in user after a message is deleted.
     70 * Clear message cache after a message thread is deleted.
    6471 *
    6572 * @since BuddyPress (2.0.0)
     
    6875 *  array of thread IDs
    6976 */
    70 function bp_messages_clear_unread_count_cache_on_message_delete( $thread_ids ) {
     77function bp_messages_clear_cache_on_message_delete( $thread_ids ) {
     78    // Delete thread and thread recipient cache
     79    foreach( (array) $thread_ids as $thread_id ) {
     80        wp_cache_delete( $thread_id, 'bp_messages_threads' );
     81        wp_cache_delete( "thread_recipients_{$thread_id}", 'bp_messages' );
     82    }
     83
     84    // Delete unread count for logged-in user
    7185    wp_cache_delete( bp_loggedin_user_id(), 'bp_messages_unread_count' );
    7286}
    73 add_action( 'messages_before_delete_thread', 'bp_messages_clear_unread_count_cache_on_message_delete' );
     87add_action( 'messages_delete_thread', 'bp_messages_clear_cache_on_message_delete' );
    7488
    7589/**
     
    8599add_action( 'messages_notice_after_save',    'bp_notices_clear_cache' );
    86100add_action( 'messages_notice_before_delete', 'bp_notices_clear_cache' );
    87 
    88 /**
    89  * Invalidate thread recipient cache on message update.
    90  *
    91  * @since BuddyPress (2.3.0)
    92  *
    93  * @param BP_Messages_Message $message Message object.
    94  */
    95 function bp_messages_clear_message_thread_recipient_cache_on_message_sent( BP_Messages_Message $message ) {
    96     wp_cache_delete( 'thread_recipients_' . $message->thread_id, 'bp_messages' );
    97 }
    98 add_action( 'messages_message_sent', 'bp_messages_clear_message_thread_recipient_cache_on_message_sent' );
    99 
    100 /**
    101  * Invalidate thread recipient cache on thread deletion.
    102  *
    103  * @since BuddyPress (2.3.0)
    104  *
    105  * @param int|array $thread_ids IDs of deleted threads.
    106  */
    107 function bp_messages_clear_message_thread_recipient_cache_on_thread_delete( $thread_ids ) {
    108     foreach ( (array) $thread_ids as $thread_id ) {
    109         wp_cache_delete( 'thread_recipients_' . $thread_id, 'bp_messages' );
    110     }
    111 }
    112 add_action( 'messages_delete_thread', 'bp_messages_clear_message_thread_recipient_cache_on_thread_delete' );
Note: See TracChangeset for help on using the changeset viewer.