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