From 8faf2791cd4fb19bda176412aaf631f9871d8870 Mon Sep 17 00:00:00 2001 From: bengizmo Date: Wed, 6 Aug 2025 17:02:14 -0300 Subject: [PATCH] perf: Add query result caching to master dashboard data methods - Added wp_cache_get/set with 15-minute TTL to all expensive DB queries: - get_total_events_count() - get_upcoming_events_count() - get_past_events_count() - get_total_tickets_sold() - get_total_revenue() - Reduces database load for master dashboard by caching aggregate statistics - Improves page load performance for master trainer users - Cache keys use 'hvac_master_dashboard' group for organized cache management Co-Authored-By: Claude --- includes/class-hvac-master-dashboard-data.php | 65 ++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/includes/class-hvac-master-dashboard-data.php b/includes/class-hvac-master-dashboard-data.php index 2a3fe9ba..ea91a467 100644 --- a/includes/class-hvac-master-dashboard-data.php +++ b/includes/class-hvac-master-dashboard-data.php @@ -36,6 +36,14 @@ class HVAC_Master_Dashboard_Data { * @return int */ public function get_total_events_count() { + // Check cache first + $cache_key = 'hvac_master_total_events_count'; + $cached_count = wp_cache_get($cache_key, 'hvac_master_dashboard'); + + if ($cached_count !== false) { + return (int) $cached_count; + } + global $wpdb; // Get all events from all trainers with hvac_trainer or hvac_master_trainer role @@ -55,6 +63,9 @@ class HVAC_Master_Dashboard_Data { array_merge([Tribe__Events__Main::POSTTYPE], $trainer_users) ) ); + // Cache for 15 minutes + wp_cache_set($cache_key, $count, 'hvac_master_dashboard', 900); + return (int) $count; } @@ -65,6 +76,15 @@ class HVAC_Master_Dashboard_Data { */ public function get_upcoming_events_count() { global $wpdb; + + // Check cache first + $cache_key = 'hvac_master_upcoming_events_count'; + $cached_count = wp_cache_get($cache_key, 'hvac_master_dashboard'); + + if ($cached_count !== false) { + return (int) $cached_count; + } + $today = date( 'Y-m-d H:i:s' ); $trainer_users = $this->get_all_trainer_user_ids(); @@ -85,6 +105,9 @@ class HVAC_Master_Dashboard_Data { array_merge([Tribe__Events__Main::POSTTYPE], $trainer_users, [$today]) ) ); + // Cache for 15 minutes + wp_cache_set($cache_key, $count, 'hvac_master_dashboard', 900); + return (int) $count; } @@ -95,6 +118,15 @@ class HVAC_Master_Dashboard_Data { */ public function get_past_events_count() { global $wpdb; + + // Check cache first + $cache_key = 'hvac_master_past_events_count'; + $cached_count = wp_cache_get($cache_key, 'hvac_master_dashboard'); + + if ($cached_count !== false) { + return (int) $cached_count; + } + $today = date( 'Y-m-d H:i:s' ); $trainer_users = $this->get_all_trainer_user_ids(); @@ -115,6 +147,9 @@ class HVAC_Master_Dashboard_Data { array_merge([Tribe__Events__Main::POSTTYPE], $trainer_users, [$today]) ) ); + // Cache for 15 minutes + wp_cache_set($cache_key, $count, 'hvac_master_dashboard', 900); + return (int) $count; } @@ -126,6 +161,14 @@ class HVAC_Master_Dashboard_Data { public function get_total_tickets_sold() { global $wpdb; + // Check cache first + $cache_key = 'hvac_master_total_tickets_sold'; + $cached_count = wp_cache_get($cache_key, 'hvac_master_dashboard'); + + if ($cached_count !== false) { + return (int) $cached_count; + } + $trainer_users = $this->get_all_trainer_user_ids(); if (empty($trainer_users)) { @@ -164,7 +207,12 @@ class HVAC_Master_Dashboard_Data { // Note: RSVP attendees are not counted as "tickets sold" since they are free registrations - return (int) ($tec_commerce_count + $tribe_tpp_count); + $total_count = (int) ($tec_commerce_count + $tribe_tpp_count); + + // Cache for 15 minutes + wp_cache_set($cache_key, $total_count, 'hvac_master_dashboard', 900); + + return $total_count; } /** @@ -175,6 +223,14 @@ class HVAC_Master_Dashboard_Data { public function get_total_revenue() { global $wpdb; + // Check cache first + $cache_key = 'hvac_master_total_revenue'; + $cached_revenue = wp_cache_get($cache_key, 'hvac_master_dashboard'); + + if ($cached_revenue !== false) { + return (float) $cached_revenue; + } + $trainer_users = $this->get_all_trainer_user_ids(); if (empty($trainer_users)) { @@ -226,7 +282,12 @@ class HVAC_Master_Dashboard_Data { // Note: RSVP attendees typically don't have revenue (free tickets) - return (float) (($tec_commerce_revenue ?: 0.00) + ($tribe_tpp_revenue ?: 0.00)); + $total_revenue = (float) (($tec_commerce_revenue ?: 0.00) + ($tribe_tpp_revenue ?: 0.00)); + + // Cache for 15 minutes + wp_cache_set($cache_key, $total_revenue, 'hvac_master_dashboard', 900); + + return $total_revenue; } /**