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');