一个糟糕的WordPress 函数 is_multi_author()

今天在帮一位网友优化一个WordPress网站,网站合集有超过十万的篇文章,超过 200 万 字段。真是糟糕的主题功能设计。暂且不说。说说这一次优化中主要遇到的问题之一,一个性能糟糕的函数 is_multi_author() 。这个函数返回一个布尔值,用来判断当前站点是否具有两个以上的作者。坦率地讲,我都不知道这个函数有什么用。我要说的是它糟糕的性能,在未使用对象缓存的情况下,这个函数在10万文章的站点需要耗时接近一秒钟。注意这位朋友的服务器可是高配。4核心,8GB内存。通过WordPress的插件query monitor诊断出这个问题。发现在是所使用的主题中调用了这个函数。移除之后,瞬间提速1秒钟。

不过稍后在我查看这个函数的源码的时候,发现这个函数的sql查询的确耗时,因为它会把所有的post都查询一遍,但本身这个查询是通过一个瞬态缓存在option里面的。按理说,这个不至于每次都要重新执行sql查询。而瞬态在启用了对象缓存之后,就会自动转为使用对象缓存,存在内存中。因为是客户的站点,我也没做深入研究是什么原因导致了瞬态失效。总之如果主题中使用了这个函数,建议删除。