From c019a851b3c3b00af1b3768736a66b95743534dc Mon Sep 17 00:00:00 2001 From: Paul Kevan <2290623+pkevan@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:01:22 +0000 Subject: [PATCH 1/4] Update class-sensei-reports-overview-service-courses.php Adds caching to `get_courses_average_grade` to avoid excessive query time. --- ...class-sensei-reports-overview-service-courses.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php b/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php index cda0f54fee..0be5b00b69 100644 --- a/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php +++ b/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php @@ -94,6 +94,13 @@ public function get_courses_average_grade( array $course_ids ) { if ( empty( $course_ids ) ) { return 0; } + // Sets a cache key with a determinate string length for `set_transient`. + $cache_key = 'get_courses_average_grade_' . md5( implode( '', $course_ids ) ); + + if ( false !== $average_cached = get_transient( $cache_key ) ) { + return $average_cached; + } + global $wpdb; /** * The subquery calculates the average grade per course, and the outer query then calculates the @@ -125,7 +132,10 @@ public function get_courses_average_grade( array $course_ids ) { ) averages_by_course' ); - return floatval( $result->courses_average ); + $course_result = floatval( $result->courses_average ); + set_transient( $cache_key, $course_result, HOUR_IN_SECONDS ); + + return $course_result; } /** From c4958b8afc96e1baa2cd12a8ed1128c2e0e54cec Mon Sep 17 00:00:00 2001 From: Paul Kevan <2290623+pkevan@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:05:26 +0000 Subject: [PATCH 2/4] Add changelog --- changelog/course-averages-add-caching | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog/course-averages-add-caching diff --git a/changelog/course-averages-add-caching b/changelog/course-averages-add-caching new file mode 100644 index 0000000000..f83fd767e9 --- /dev/null +++ b/changelog/course-averages-add-caching @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Add caching to expensive query From 0ff2f3e16d8b36643ab349eae04418aa509c942e Mon Sep 17 00:00:00 2001 From: Paul Kevan <2290623+pkevan@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:20:24 +0000 Subject: [PATCH 3/4] phpcs --- .../class-sensei-reports-overview-service-courses.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php b/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php index 0be5b00b69..fad40ec47c 100644 --- a/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php +++ b/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php @@ -96,11 +96,11 @@ public function get_courses_average_grade( array $course_ids ) { } // Sets a cache key with a determinate string length for `set_transient`. $cache_key = 'get_courses_average_grade_' . md5( implode( '', $course_ids ) ); - - if ( false !== $average_cached = get_transient( $cache_key ) ) { + $average_cached = get_transient( $cache_key ) + if ( false !== $average_cached ) { return $average_cached; } - + global $wpdb; /** * The subquery calculates the average grade per course, and the outer query then calculates the From 56db30784050a9a7cf262d4bb547a98dbe9ace55 Mon Sep 17 00:00:00 2001 From: Paul Kevan <2290623+pkevan@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:22:43 +0000 Subject: [PATCH 4/4] more phpcs --- .../class-sensei-reports-overview-service-courses.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php b/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php index fad40ec47c..03faa12515 100644 --- a/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php +++ b/includes/reports/overview/services/class-sensei-reports-overview-service-courses.php @@ -95,8 +95,9 @@ public function get_courses_average_grade( array $course_ids ) { return 0; } // Sets a cache key with a determinate string length for `set_transient`. - $cache_key = 'get_courses_average_grade_' . md5( implode( '', $course_ids ) ); - $average_cached = get_transient( $cache_key ) + $cache_key = 'get_courses_average_grade_' . md5( implode( '', $course_ids ) ); + $average_cached = get_transient( $cache_key ); + if ( false !== $average_cached ) { return $average_cached; }