問題描述

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