如果我缓存一个使用后处理数据的对象,它会被复制吗?

时间:2012-09-27 作者:Jenny

我有一个对象,它将数据保存在Posteta中。当有post\\u id时,object类将使用get\\u post\\u cutom()查询数据;获取数据后,它开始工作,最终结果是基于数据的图形表示。

我知道wordpress处理postmeta缓存,但我想知道:

我应该缓存图形演示的最终结果吗?

2 个回复
最合适的回答,由SO网友:onetrickpony 整理而成

如果生成图形表示需要大量的CPU时间或内存,那么可以缓存图形表示(我想是HTML吧?)。可能在数据库/内存中transient.

缓存post元数据(用于生成图形)是不必要的,因为WP已经处理了这一点。如果您也这样做,那么相同的数据将在内存中存储两次。但请记住,默认情况下,WP的缓存不是持久的,因此在脚本完成执行后(在每次页面加载时),缓存会被刷新。如果需要的话,有一些插件可以实现持久对象缓存。

总结:

您不会缓存使用以下包装函数进行的post查询的结果get_posts(), get_post_meta() 等WP内部已经做到了这一点

如果操作成本低于典型数据库,请从WP中选择查询options 表,然后使用WP\'s object cache API

如果比这类查询更昂贵,那么您可以使用瞬态API,它将数据存储在数据库中,但只有在内存缓存接口不可用的情况下。否则,它将使用对象缓存。

如果您可以使用持久对象缓存插件,则不必考虑上述所有内容(example), 去做吧!因为访问内存总是比查询数据库更快,数据库通常是磁盘上的文件,而磁盘速度较慢。

SO网友:Tom J Nowell

答案很简单:

If it costs considerably more to grab the cached data from the DB than it does to generate it from scratch, cache it.

创建“图形演示文稿”是否会显著降低页面速度?如果是,请缓存它。如果没有,请不要。

Is it duplication? No 你从post meta开始的内容和你最终得到的内容是不一样的。

结束

相关推荐

Is the object cached?

我有一个函数来实例化一个类,以提供对其他函数的var访问。function my_data(){ global $post,$the_data; $postid = get_the_ID(); $the_data = new MY_Class ( $postid ); return $the_data; } 每个帖子都会调用这个函数,每当需要MY\\u类中的var时,每个帖子都会多次调用它。数据保存在WordPress Posteta中,并在My\\u类中