Memcached 内存缓存优化 WordPress 后台媒体库加载

文章目录[隐藏]

作为一个 WordPress 站长,其仪表盘媒体库应该是每个人都会去使用的功能,哪怕你已经做了动静态分离、对象存储接口,还是需要使用媒体库来管理各种媒体文件。而媒体库有个月份筛选功能,每次打开媒体库、添加媒体或者按月份筛选图片,都会进行一个数据库查询操作,从而每次点击都有卡顿的感觉。本文将介绍使用 Memcached 内存缓存优化 WordPress 后台媒体库加载速度。

媒体库月份筛选

在 WordPress 后台,点击媒体库选择图片的时候,可以按照月份筛选附件,这个是 WordPress 的媒体库月份筛选功能,博客的这些附件的月份是直接通过查询数据库来获取的。

这样每次添加媒体打开媒体库媒体库月份筛选或者打开添加媒体弹窗时候,都会到数据库去查询。

内存缓存优化媒体库

虽然不会造成很大的问题,但是附件如果不新增删除,这个月份的数据基本不会变化,我们可以通过 Memcached 内存缓存将 WordPress 媒体库缓存起来。这样操作起来就更顺畅,尤其是媒体文件较多的小伙伴,会有立竿见影的效果。

另外,WordPress 速度优化、性能优化都是这些小地方一点一点积累起来。

将下面的代码复制到当前主题的 functions.php 文件中,就可以使用内存来缓存媒体库的月份了:

/**
 * Memcached 内存缓存优化 WordPress 后台媒体库加载
 * https://wpexp.cn/300.html
 */
// 缓存获取附件的月份。
add_filter('media_library_months_with_files', function($months){
	$months	= get_transient('wpexp_media_library_months');

	if($months === false) {
		global $wpdb;

		$months = $wpdb->get_results("SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month FROM $wpdb->posts WHERE post_type = 'attachment' ORDER BY post_date DESC");

		set_transient('wpexp_media_library_months', $months, WEEK_IN_SECONDS);
	}

	return $months;
});

// 删除附件月份的缓存
function wpexp_delete_media_library_months_cache(){
	delete_transient('wpexp_media_library_months');
}
add_action('edit_attachment',	'wpexp_delete_media_library_months_cache');
add_action('add_attachment',	'wpexp_delete_media_library_months_cache');
add_action('delete_attachment',	'wpexp_delete_media_library_months_cache');