问题描述
我以前从来没有使用过 Transient API,并且想知道是否有任何人有关于什么时候使用它的指导。 Codex article 意味着作为主题开发人员,我可能希望将每个新的 WP_Query()
设置为短暂的; 我假设对于直接 $ wpdb 查询和 query_posts()
也可以这样说。那是否过度杀戮?还有/还有其他地方我应该默认使用它吗?
我经常在我的网站上使用缓存插件 (通常为 W3 Total Cache),而且听起来像使用 Transients 可能会增加插件的效能,但是如果不是最佳做法,我不想疯狂地将所有内容都包含在瞬态中。
最佳解决方案
当您在主题和插件中执行复杂的查询时,瞬态很好。我倾向于将瞬态用于菜单,例如在侧边栏中显示 Twitter 中的其他内容。我绝对不会使用它们绝对的一切 more-so 只是临时的数据可以被缓存。
请记住,如果您使用类似 Memcached 的瞬态,那么您会注意到巨大的性能增益。具有瞬态规则的规则是不将它们用于不应该过期的数据,因为它们只适用于临时数据,并且请记住,瞬态不总是存储在数据库中。
瞬态的一些用途:
-
复杂和自定义数据库查询
-
WordPress 导航菜单
-
显示信息的边栏小工具推特,最近的网站访问者列表或 Flickr 照片流
-
缓存标签云
This article 是一个非常有用的信息,快速的基准测试显示瞬态可以加快您的网站,甚至有几个例子。 This other article 还有一些使用瞬态的很好的例子,这可能有助于您了解使用它们的方式。
次佳解决方案
WordPress 中有几种缓存机制,其机制有所不同,具体取决于 object cache(本机或非本机) 的选择:
+-----------+-------------------------+---------------------+
| | Native | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option | Persistent (database) | N/A |
| Transient | Persistent (database) | Persistent (varies) |
| Cache | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+
简单来说,这意味着瞬态总是持续的 (将在页面加载之间生存,而不是缓存本身),但是如果提供了定制存储 (与选项不同),它将会使用定制存储。
这使得瞬变最为多样化的缓存选择。
然而,灵活性导致了流程复杂性,并且与它们有很多细微差别 (例如,限制名称长度,具有和不具有期限的不同行为,缺乏垃圾收集),使得它们比它们看起来更复杂。
总体:
-
使用选项来保存必须持久的东西
-
使用瞬变来缓存任何其他东西
-
使用缓存,当你对所有这三个都很好的掌握,并且知道 Cache 适合用例比别人更好 (这不会经常)
第三种解决方案
我认为来自 Sterling 的代码可以通过不调用 get_transient 函数两次来改进。而是将第一个结果存储在临时变量中。因为 Transient API 背后的想法是速度;-)
private function _get_data( $query) {
$result = get_transient( $query );
if ( $result ) {
return $result;
} else {
return $this->_get_query( $query );
}
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。