問題描述
我以前從來沒有使用過 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。