我以前从未使用过Transients API,并且想知道是否有人对何时使用它提供了指导。该法典文章暗示为主题的开发者,我可能需要设置每一个新的WP_Query()
为一过性; 我认为直接$ wpdb查询和也可以这样说query_posts()
。那是过度杀伤力吗?和/或还有其他地方我应该默认使用它?
我经常在我的站点上使用缓存插件(通常是W3 Total Cache),听起来好像使用Transients可能会提高插件的有效性,但是如果这不是最佳实践,我不想疯狂地将所有内容包装在瞬态中。
我以前从未使用过Transients API,并且想知道是否有人对何时使用它提供了指导。该法典文章暗示为主题的开发者,我可能需要设置每一个新的WP_Query()
为一过性; 我认为直接$ wpdb查询和也可以这样说query_posts()
。那是过度杀伤力吗?和/或还有其他地方我应该默认使用它?
我经常在我的站点上使用缓存插件(通常是W3 Total Cache),听起来好像使用Transients可能会提高插件的有效性,但是如果这不是最佳实践,我不想疯狂地将所有内容包装在瞬态中。
Answers:
当您在主题和插件中进行复杂的查询时,瞬态非常有用。我倾向于将瞬态用于菜单之类的东西,并在边栏中显示诸如Twitter的Tweets之类的其他东西。我绝对不会将它们用于所有其他事情,因此只能使用可缓存的临时数据。
请记住,如果您使用带有瞬态的Memcached之类的东西,那么您将注意到巨大的性能提升。瞬态的规则是不要将它们用于不应过期的数据,因为它们实际上仅用于临时数据,并且请记住,瞬态并不总是存储在数据库中。
瞬态的一些用途:
本文是一篇非常有用的文章,提供了快速的基准测试,展示了瞬态如何加快您的网站速度,甚至提供了一些示例。另一篇文章也提供了一些使用瞬态的出色示例,这些示例可能也有助于您了解如何使用瞬态。
WordPress中有几种缓存机制,其机制各不相同,具体取决于对象缓存的选择(本机或非本机):
+-----------+-------------------------+---------------------+
| | Native | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option | Persistent (database) | N/A |
| Transient | Persistent (database) | Persistent (varies) |
| Cache | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+
简而言之,这意味着瞬态始终是持久的(与本机Cache不同,瞬态将在页面加载之间保留),但如果提供了瞬态,它将利用自定义存储(与Option不同)。
这使瞬变成为缓存的最通用选择。
但是,灵活性带来了当前的复杂性,并且它们之间有很多细微差别(例如名称长度的限制,带有或不带有到期期限的不同行为,缺少垃圾回收)使它们变得比看起来复杂。
总体:
简短的回答:您应该在可能的地方/地点使用它。
长答案:
Transients API用于缓存。因此,您想尽可能多地使用它。您可以编写一个为您执行此操作的函数。
这不是矫kill过正,如果做得正确,最终会很优雅:
// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
return
( get_transient( $query ) ) ?
get_transient( $query ) :
$this->_get_query( $query );
}
// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
// Database logic. Results go to $results.
...
set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}
当您从Facebook,Twitter等外部来源获取数据时,Transients API确实非常有用。
为了更清楚地了解什么是Transients API,以及与Cache WordPress函数的区别是什么,我建议观看WordCamp San Francisco 2011的 Otto和Nanic的演讲