Transients APIはいつ使用する必要がありますか?


15

私はこれまでにTransients APIを使用したことがなく、いつ使用するかについてのガイダンスがあるかどうか疑問に思っていました。コーデックスの記事は、テーマの開発者として、私はそれぞれの新しいを設定したい場合がありますことを意味WP_Query()一時的なものとして、直接$ wpdbクエリとについても同じことが言えると思いquery_posts()ます。それはやり過ぎですか?および/またはデフォルトで使用する他の場所はありますか?

私は自分のサイトでキャッシュプラグインをよく使用します(通常はW3 Total Cache).Transientsを使用するとプラグインの効果が上がるかもしれませんが、それがベストプラクティスではない場合、一時的にすべてをラップするのは面倒です。


皆さんに感謝します。複数の答えを「解決策」としてマークできたらと思います。素晴らしい情報、大歓迎です!
ミシェル

回答:


15

テーマやプラグインで複雑なクエリを実行している場合、一時的は素晴らしいです。私は、メニューなどのトランジェントを使用する傾向があり、たとえば、Twitterからのツイートのようなものをサイドバーに表示する傾向があります。絶対にすべてに使用するのではなく、キャッシュ可能な一時的なデータのみを使用します。

Memcachedなどのトランジェントを使用すると、パフォーマンスが大幅に向上することに注意してください。一時データのルールは、実際には一時データのみであり、一時データは常にデータベースに保存されるわけではないため、期限切れにならないデータには使用しないことです。

トランジェントの用途

  • 複雑なカスタムデータベースクエリ
  • Wordpressのナビゲーションメニュー
  • 以下のような情報を表示するサイドバーウィジェット。ツイート、最近のサイト訪問者のリスト、またはFlickrの写真ストリーム
  • タグクラウドをキャッシュする

この記事は、非常に有益な記事であり、過渡現象がサイトを高速化する方法を示す簡単なベンチマークと、いくつかの例を示しています。この他の記事には、トランジェントを使用する優れた例もいくつかあります。これは、トランジェントを何に使用するかを理解するのに役立ちます。


2
別の用途:外部HTTP要求のキャッシュ。twitter APIを押すのが好きです。すべてのページの読み込みで実行しないで、結果を一時的にキャッシュします。
chrisguitarguy

10

WordPressにはいくつかのキャッシュメカニズムがあり、そのメカニズムはオブジェクトキャッシュの選択(ネイティブかどうか)によって異なります。

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

一言で言えば、これは一時的なものが常に永続的であることを意味します(ネイティブとは異なり、ページのロード間で存続します)が(オプションとは異なり)カスタマイズされたストレージを使用します。

これにより、トランジェントがキャッシングに最も汎用的な選択肢になります。

ただし、柔軟性には複雑さが伴うため、見た目よりも複雑になる微妙な違い(名前の長さの制限、有効期限の有無による動作の違い、ガベージコレクションの欠如など)があります。

全体:

  • 永続的でなければならないものを保存するためのオプションを使用する
  • 他のものをキャッシュするためにTransientsを使用します
  • 3つすべてを非常によく理解していて、Cacheが他のケースよりもユースケースに適合していることを知っている場合はキャッシュを使用します。

3

Sterlingのコードは、get_transient関数を2回呼び出さないことで改善できると思います。代わりに、最初の結果を一時変数に保存します。トランジェントAPIの背後にあるアイデアはスピードだからです;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}

2

短い答え:できるとき/どこででも使用すべきです。

長い答え:

Transients APIはキャッシュ用です。だから、あなたはできる限りそれを使いたい。これを行う関数を作成できます。

それはやり過ぎではなく、適切に行われれば、かなりエレガントになります:

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}

2

Transients APIは、Facebook、Twitterなどの外部ソースからデータを取得するときに非常に便利です。

Transients APIとは何か、WordPressのCache機能との違いをより明確に理解するために、2011年のWordCamp San FranciscoでのOttoとNanicの講演をご覧になることをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.