問題描述

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