文章目录[隐藏]
这个教程主要是方便和我一样使用 iGoogler 主题的人,能给自己的站点提一下速。因为一个效率优化做得那么好的主题,如果你还觉得速度慢,那真的是你不会使用了。
下面我将以 iGoogler 主题的“相关文章”为例,说一下如何巧用 PostMeta 提速。
我们知道 “相关文章”的获取原理是通过文章的 Tags 来获取相关文章,相同的 Tag 越多,相关性越强,这样就需要进行大量的数据查询,大大降低了站点的效率。但是,一篇文章,在短时间内,它的“相关文章”是不会变动的。所以我们就可以使用缓存对“相关文章”进行加速。
第一个方法是使用 WordPress Object Cache,这个方法需要配合服务器设置或插件,,否则基本没用,这也许会令某些人大感不爽。
所以下面我就要讲第二个方法——巧用 PostMeta:
PostMeta 加速原理
我们知道,PostMeta 表是用来存储 Post 其他自定义字段,比如你可以在 WordPress 编辑界面自定义字段那里使用它。那么我可以把当前文章的“相关文章”数据写到 PostMeta 中去,并记录写入的时间。然后再取出,就可以达到加速的效果。
巧用 PostMeta 提速
下面是把“相关文章”的数据写入缓存(PostMeta)的例子,缓存时间为一个小时,即 3600 秒。
打开主题的 loop_single.php,将
<?php echo wp_get_related_posts_igoogler(10); ?>
替换为
<?php global $id; $related_posts_data_old = get_post_meta($id, "related_posts", $single = true); if($related_posts_data_old){ $time = time(); if(($time - $related_posts_data_old["time"]) < 3600){ echo $related_posts_data_old["related_posts"]; } }else{ $related_posts_data = wp_get_related_posts_igoogler(10); $related_posts_data_new = array("time"=>time(), "related_posts"=>$related_posts_data); if($related_posts_data_old){ update_post_meta($id, 'related_posts', $related_posts_data_new); }else{ add_post_meta($id, 'related_posts', $related_posts_data_new, true); } echo $related_posts_data; } ?>
代码大意是:如果在缓存(PostMeta)中找不到数据,就查询数据库,然后再将数据写入缓存,并设定过期时间为一个小时,即 3600 秒;如果找得到缓存,并且缓存没有过期,就直接使用缓存的数据。