すべてのWPコードがパブリックコードではない
あなたが何かを公開するつもりなら、コブシェニンが言ったことはすべて完全に有効です。
あなた自身またはあなたの会社のためにプライベートコードを書くつもりなら、状況は異なります。
外部オブジェクトキャッシュは、どんな場合でも大きなメリットです
可能であれば、外部永続オブジェクトキャッシュを設定することをお勧めします。
過渡現象とMySQLに関するkovsheninの答えで述べられたすべてのことは非常に真実であり、WP自体と多くのプラグインがオブジェクトキャッシュを使用することを考慮すると... RedisやMemcachedのような最新のキャッシュシステム。
キャッシュされた値が存在しない可能性がある:それは問題ありません
さらに、はい、外部オブジェクトキャッシュは信頼できません。トランジェントが存在するという事実に決して頼るべきではありません。キャッシュが本来あるべき場所にない場合、それが機能することを確認する必要があります。
キャッシュはストレージではなく、キャッシュはキャッシュです。
キャッシュを選択的に使用する
この例を参照してください。
function my_get_some_value($key) {
// by default no cache when debug and if no external object_cache
$defUse = ! (defined('WP_DEBUG') && WP_DEBUG) && wp_using_ext_object_cache();
// make the usage of cache filterable
$useCache = apply_filters('my_use_cache', $defUse);
// return cached value if any
if ($useCache && ($cached = get_transient($key))) {
return $cached;
}
// no cached value, make sure your code works with no cache
$value = my_get_some_value_in_some_expensive_way();
// set cache, if allowed
$useCache and set_transient($key, $value, HOUR_IN_SECONDS);
return $value;
}
このようなコードをプライベートサイトで使用すると、特に多くのユーザーがいる場合、サイトのパフォーマンスが大幅に向上します。
ご了承ください:
- デフォルトでは、デバッグがオンの場合、キャッシュは使用されないため、開発環境で使用することをお勧めします。私を信じて、キャッシュはデバッグを地獄にすることができる
- WPが外部オブジェクトキャッシュを使用するように設定されていない場合、デフォルトではキャッシュも使用されません。これは、MySQLを使用するときにトランジェントを使用しないため、MySQLに関連するすべての問題が存在しないことを意味します。おそらくもっと簡単な代替手段は、
wp_cache_*
functionsを使用することです。したがって、外部キャッシュが設定されていない場合、キャッシュはメモリ内で発生し、データベースは関与しません。
- キャッシュの使用はフィルタリング可能で、発生する可能性のあるいくつかのエッジケースを処理します
キャッシュがなければWebscaleはありません
キャッシュの速度の問題を解決しようとしないでください。速度に問題がある場合は、コードを再考する必要があります。
しかし、webscaleでWebサイトをスケーリングするには、キャッシュがかなり必要です。
また、多くの場合(常にではありませんが)断片化されたコンテキスト対応キャッシュは、積極的なフルページキャッシュよりもはるかに柔軟で適切です。
あなたの質問:
ここでTransient APIを使用する必要がありますか?
それは依存します。
あなたのコードは多くのリソースを消費していますか?そうでない場合、キャッシュの必要はないかもしれません。前述のように、スピードだけではありません。コードの実行速度は速いが、2人のユーザーに大量のCPUとメモリが必要な場合... 100人または1000人の同時ユーザーがいる場合はどうなりますか?
キャッシュを実現することをお勧めします。
...そして公開コードです:おそらくnoです。上記の公開コードの例のように、選択的にキャッシュすることを検討できますが、そのような決定を実装者に任せた方が通常は優れています。
...そしてプライベートコードです:おそらくyesです。ただし、プライベートコードの場合でも、たとえばデバッグの場合など、選択的にキャッシュすることは良いことです。
とにかく、wp_cache_*
関数はデータベースを汚染するリスクなしにキャッシュにアクセスできることを覚えておいてください。
Transient APIを使用して$ related_posts配列または$ html_output文字列をキャッシュする必要がありますか?
それは多くのことに依存します。文字列の大きさは?どの外部キャッシュを使用していますか?投稿をキャッシュする場合は、IDを配列として保存することをお勧めします。IDで適切な数の投稿を照会するのは非常に高速です。
最終ノート
Transient APIは、おそらくWordPressの最高の機能の1つです。あらゆる種類のキャッシュシステムで使用できるプラグインのおかげで、内部で機能する多数のソフトウェアにとって愚かな単純なAPIになります。
WordPress以外では、さまざまなキャッシングシステムを使用してすぐに動作し、1つのシステムから別のシステムに簡単に切り替えることができる抽象化を見つけるのは非常に困難です。
WordPressが他の最新のものより優れていると言っているのを聞くことはめったにありませんが、一時的なAPIはWordPressで作業していないときに見落とす数少ないものの1つです。
確かにキャッシュは難しく、コードの問題を解決せず、特効薬ではありませんが、動作する高トラフィックサイトを構築するために必要なものです。
最適化されていないMySQLテーブルを使用してキャッシュを実行するというWordPressのアイデアは非常に正気ではありませんが、デフォルトでWordPressが実行するからといって、キャッシュから遠ざけるのは良くありません。
あなたは物事がどのように機能するかを理解する必要があり、それからあなたの選択をします。