使用 PostMeta 提速 WordPress 插件
WordPress Related Posts 这个插件已经被下载了2万多次。但是个人对这个插件一直有一个不满意的地方,那就是效率不是很高。我在我的 Bluehost 空间安装这个插件的时候,几次因为这个插件 SLOW SQL 搞的 CPU 超限而被 Suspend 了几分钟,狂晕。
是的,这个插件是使用了一条效率很低的 SQL,因为根据 Tag 来查找相关日至要对所有的 Post 扫一便,看看是不是有相同的 Tag。我想了很久,还是没有想到效率更高的缓存,大学的时候 SQL 还是学得不错,但是现在基本都不懂了,汗!既然没有想到效率更高的 SQL,我想到的第二个方法是缓存,第一个方法是可以使用 WordPress 对象缓存,但是 WordPress 2.5 已经全部采用内存缓存而舍弃了文件缓存,如果主机没有安装内存缓存模块,基本没用,当然也可以是用高级缓存插件,如:WordPress Super Cache。不过我这里使用的是 PostMeta 来缓存。
我们知道,PostMeta 表是用来存储 Post 其他自定义字段,比如你可以在 WordPress 编辑界面自定义字段那里使用它。那么我可以把当前日志的相关日志列表写到 PostMeta 中去,并记录写入的时间。然后再取出,就可以达到加速的效果。具体代码如如下:
<?php
global $id;
$output_old = get_post_meta($id, "related_posts", $single = true); // 从 postmeta 表中获取缓存的相关日志
if($output_old){ //如果返回结果不为空
$time = time();
if(($time - $output_old["time"])<600){ //并且在缓存的时间以内(600秒)
echo $output_old["related_posts"];
}
}else{
$output = wp_get_related_posts() ; //获取相关日志
$output_new = array("time"=>time(),"related_posts"=>$output);
if($output_old){//如果 postmeta 中已有记录,更新
update_post_meta($id, 'related_posts', $output_new);
}else{ //否则,新插入
add_post_meta($id, 'related_posts', $output_new, true);
}
echo $output;
}
?>
当然了,这样缓存也有点不好,就是相关后台配置修改要一段时间才能体现出来。下载:WordPress Related Posts 0.8