wordpress 0 sql主题

文章目录(快捷跳转)

 ​



这个0sql主题是由上面这个76kb的主题重置成的。添加了[本文防采集]

1.分页 跳页功能和 2.文章摘要功能 3.旋转播放器 4.性能统计输出 5.一些加载的优化[本文防采集]

移除 Pingback 链接
移除 Block Library CSS
移除 REST API 链接
移除 EditURI (RSD) 链接
移除 WordPress 生成器标签
移除 Feed 订阅功能​





0sql使用了以下技术(来自我爱水煮鱼)[本文防采集]

WordPress 安装 Memcached 之后,WordPress 的文章页,基本上可以做到 0 SQL 请求,但是首页或者其他列表页总是有两条 SQL 请求,怎么优化呢?

如何缓存 WordPress 主循环
首先在 posts_pre_query filter 基于查询参数 $query_vars 创建缓存的 $cacke_key。​

并且使用该 $cache_key 查询一下内存中是否已有相关数据,如有直接返回数据,WordPress 就不会到数据库查询了。​

add_filter('posts_pre_query', function ($pre, $wp_query){
if(!$wp_query->is_main_query()){ // 只缓存主循环
return $pre;
}

$cache_key = md5(maybe_serialize($wp_query->query_vars));

$wp_query->set('cache_key', $cache_key);

$post_ids = wp_cache_get($cache_key, 'wpjam_post_ids');

if($post_ids === false){
return $pre;
}

return wpjam_get_posts($post_ids);
}, 10, 2);

如果前面在内存中没有相关缓存,这个时候 WordPress 已经到数据库查询出相关的结果了,使用 posts_results filter 把 WordPress 主循环的结果缓存到 memcached。

这样下次 WordPress 在此查询相同的数据的时候,在 posts_pre_query filter 就会直接返回。

add_filter('posts_results',	 function ($posts, $wp_query) {
	$cache_key	= $wp_query->get('cache_key');

	if($cache_key){
		$post_ids	= wp_cache_get($cache_key, 'wpjam_post_ids');
		if($post_ids === false){
			wp_cache_set($cache_key, array_column($posts, 'ID'), 'wpjam_post_ids', DAY_IN_SECONDS);
		}
	}

	return $posts;
}, 10, 2);

如何更新缓存
这样缓存之后,最大的问题是文章修改怎么更新缓存呢?因为每次不同查询的 $cache_key 都是不同,且和文章没有任何相关性。期间考虑过把这类的 $cache_key 全部放到一个地方,然后文章有更新,一次性把这些 $cache_key 对应的内存缓存清理掉,但是这样子处理发现还更麻烦。[本文防采集]

WordPress 中有个 wp_cache_get_last_changed 函数,它使用来存储一类 $cache_group 最后的修改时间,WordPress 文章使用的 $cache_group 是 $posts,每次文章更新删除,或者对应的分类标签修改等等涉及到文章的操作,都会影响该值,WordPress 都会该值设置最新的时间戳。​

比如下面这段代码就可以获取 $cache_group 为 $posts 的最后修改时间:​

$last_changed = wp_cache_get_last_changed('posts');

如果我们把这个 $last_changed 的值合并到缓存的 $cacke_key 中,这样文章修改了,所有的文章列表的缓存也会快速失效。这样我们就不用担心因为文章修改而造成数据不一致的问题了。​

最终 $cache_key 的设置代码改成:[本文防采集]

$cache_key = 'md5(maybe_serialize($wp_query->query_vars)).':'.wp_cache_get_last_changed('posts');

 [本文防采集]

说明文档

1.需要开启Memcached 并且把object-cache.php放到wp-content目录下

2.进行页面访问两次 触发memcached 服务器的缓存功能使其缓存到服务器内存。
然后其他第一次访问网站的客户也可以0sql访问页面了。​

增加了音乐播放器导致扣分了[本文防采集]

删除header.php里面的如下两段代码可以把分数恢复过来​

这个内容仅对VIP用户可见。请登录并点此处购买vip

 

Hidden Bot Trap
未经允许不得转载:今夕资源网 » wordpress 0 sql主题
扫二维码手机阅读本页
赞(0)

评论抢沙发

评论前必须登录!