From eb7094465d50109b9f7420d18c817129b137f385 Mon Sep 17 00:00:00 2001 From: spacedmonkey Date: Wed, 6 Sep 2023 10:03:20 +0000 Subject: [PATCH] Database: Add expiration for `dirsize_cache` to transient to improve performance. The transient `dirsize_cache` stores an array of directory sizes. This transient can grow very large, if the plugin directory has lots of sub directories in it. For example, a site with 30 plugins, the transient was around 2MB. For sites without a persistent object cache, transients without an expiration, are stored in autoloaded options. This means this option would load on every page request. Loading this option on every page request when it is not used it wasteful. Adding a expiration to this transient means it will not autoload. To ensure there is no degradation in performance, the expiration was set to a generous 10-year timeframe, making it highly unlikely to expire before it's refreshed. Props nicomollet, spacedmonkey, flixos90, wpgurudev. Fixes #54221. Built from https://develop.svn.wordpress.org/trunk@56522 git-svn-id: http://core.svn.wordpress.org/trunk@56034 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/functions.php | 8 +++++--- wp-includes/version.php | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/wp-includes/functions.php b/wp-includes/functions.php index db4fbf2a3b..44728a2e41 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -8600,7 +8600,8 @@ function recurse_dirsize( $directory, $exclude = null, $max_execution_time = nul // Only write the transient on the top level call and not on recursive calls. if ( $save_cache ) { - set_transient( 'dirsize_cache', $directory_cache ); + $expiration = ( wp_using_ext_object_cache() ) ? 0 : 10 * YEAR_IN_SECONDS; + set_transient( 'dirsize_cache', $directory_cache, $expiration ); } return $size; @@ -8635,12 +8636,13 @@ function clean_dirsize_cache( $path ) { return; } + $expiration = ( wp_using_ext_object_cache() ) ? 0 : 10 * YEAR_IN_SECONDS; if ( ! str_contains( $path, '/' ) && ! str_contains( $path, '\\' ) ) { unset( $directory_cache[ $path ] ); - set_transient( 'dirsize_cache', $directory_cache ); + set_transient( 'dirsize_cache', $directory_cache, $expiration ); return; } @@ -8659,7 +8661,7 @@ function clean_dirsize_cache( $path ) { unset( $directory_cache[ $path ] ); } - set_transient( 'dirsize_cache', $directory_cache ); + set_transient( 'dirsize_cache', $directory_cache, $expiration ); } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index 44fad9eae7..29b1bb9e42 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.4-alpha-56521'; +$wp_version = '6.4-alpha-56522'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.