Skip to:
Content

BuddyPress.org

Changeset 8047


Ignore:
Timestamp:
03/05/2014 06:11:16 PM (12 years ago)
Author:
r-a-y
Message:

Add object caching when fetching a single user's last activity.

Previously, BP_Core_User::get_last_activity() was not being cached.
This resulted in an unnecessary query being run on every page load due
to the usage of bp_core_record_activity() on the 'wp_head' action.

This commit caches calls to BP_Core_User::get_last_activity() when a
single user ID is passed and resets the cache when the user's last
activity is updated on BP_Core_User::update_last_activity().

See #5128

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/bp-core-classes.php

    r8025 r8047  
    13401340                }
    13411341
     1342                // get cache for single user only
     1343                if ( ! is_array( $user_id ) ) {
     1344                        $cache = wp_cache_get( $user_id, 'bp_last_activity' );
     1345
     1346                        if ( false !== $cache ) {
     1347                                return $cache;
     1348                        }
     1349                }
     1350
    13421351                $bp = buddypress();
    13431352
     
    13771386                $table_name = buddypress()->members->table_name_last_activity;
    13781387
    1379                 $existing = self::get_last_activity( $user_id );
    1380 
    1381                 if ( ! empty( $existing ) ) {
    1382                         $data = array(
    1383                                 'date_recorded' => $time,
    1384                         );
    1385 
    1386                         $data_format = array(
    1387                                 '%s',
    1388                         );
    1389 
    1390                         $where = array(
    1391                         );
    1392 
    1393                         $where_format = array(
    1394                                 '%d',
    1395                         );
    1396 
     1388                $activity = self::get_last_activity( $user_id );
     1389
     1390                if ( ! empty( $activity ) ) {
    13971391                        $updated = $wpdb->update(
    13981392                                $table_name,
     
    14051399                                // WHERE
    14061400                                array(
    1407                                         'id' => $existing[ $user_id ]['activity_id'],
     1401                                        'id' => $activity[ $user_id ]['activity_id'],
    14081402                                ),
    14091403
     
    14181412                                )
    14191413                        );
     1414
     1415                        // add new date to existing activity entry for caching
     1416                        $activity[ $user_id ]['date_recorded'] = $time;
     1417
    14201418                } else {
    14211419                        $updated = $wpdb->insert(
     
    14461444                                )
    14471445                        );
    1448                 }
     1446
     1447                        // setup activity array for caching
     1448                        // view the foreach loop in the get_last_activity() method for format
     1449                        $activity = array();
     1450                        $activity[ $user_id ] = array(
     1451                                'user_id'       => $user_id,
     1452                                'date_recorded' => $time,
     1453                                'activity_id'   => $wpdb->insert_id,
     1454                        );
     1455                }
     1456
     1457                // set cache
     1458                wp_cache_set( $user_id, $activity, 'bp_last_activity' );
    14491459
    14501460                return $updated;
     
    14821492                        )
    14831493                );
     1494
     1495                wp_cache_delete( $user_id, 'bp_last_activity' );
    14841496
    14851497                return $deleted;
Note: See TracChangeset for help on using the changeset viewer.