使用 PostMeta 提速 WordPress 插件

2023-04-13 19:24:28 浏览数 (1)

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 中去,并记录写入的时间。然后再取出,就可以达到加速的效果。具体代码如如下:

代码语言:javascript复制
<?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;
  }
?>

当然了,这样缓存也有点不好,就是相关后台配置修改要一段时间才能体现出来。

0 人点赞