web-dev-qa-db-ja.com

Get_postsとWP_Queryの使用

いくつかのWordPressコードで 次のPHP Code Sniffs を実行していますが、次のような警告が表示されます。

 352 | WARNING | get_posts is discouraged in favor of creating a new
     |         | WP_Query() so that Advanced Post Cache will cache
     |         | the query, unless you explicitly supply
     |         | suppress_filters => false.

私は経験豊富なプログラマーですが、私はWordPressの歴史にあまり精通していません。この警告は重要に思えますが、厄介です。私はいくつかの点について混乱しています、そして 他の答え 私は 件名見つかった 私の点に対処していないようです。

  1. 「Advanced Post Cache」とは何ですか。私はWordPressが(たくさんのPHPアプリケーションのように)キャッシングをいくつかの異なるレベルで行っていることを知っています。

  2. この警告はget_postsがキャッシュを決して使用しないことを私に言っていますが、WP_Queryは使用しますか?

  3. suppress_filtersWP_Queryを使用するとAdvanced Post Cacheが回避されることをこの警告で教えてくれますか?それともsuppress_filtersget_postsと一緒に使用するとキャッシュが呼び出されるのでしょうか。または、他の何か?

  4. suppress_filtersは他に何をしますか?

この問題にもっと詳しい人がWordPressの初心者に手掛かりを得られるならば、私はそれをいただければ幸いです。 「常にXを使用する、またはYを使用しない」というような答えを探しているのではありません。それぞれの方法のトレードオフを理解しようとしています。

5
Alan Storm

これはWordPress.com VIPに直接関連し、その影響によるものです。

VIPでは、1週間に何億ものページビューの範囲にあるサイトを扱っています。結果として、あなたのサイトを遅くすることができる状況は小規模の共有ホストよりもその規模ではるかに顕著ですが、これはまだまともなVPSの100かそこらのユーザーの領域で適度なトラフィックを持つサイトに影響を与えます。 agencysコードが本番稼働する前にすべてをコードレビューする

特にget_postsは結果をキャッシュしません。同じget_posts呼び出しを5回行うと、後で結果を保存するのではなく、データベースに5回行きます。 WP_Queryはこれをしておらず、それをはるかにうまくキャッシュしているだけでなく、ポスト全体が完全に整形されているためにget_postsでは不可能な他の最適化もしています。

get_postsに結果をキャッシュさせる方法はありますが、デフォルトではsuppress_filtersオプションはtrueですが、falseに設定した場合、WordPress内のキャッシュメカニズムが働き、結果は後で保存されます。

これらが格納されている場所に関しては、WP_Cacheと呼ばれるオブジェクトキャッシングシステムがあります。デフォルトでは、これはあなたが入れたものをすべて保存し、それを保持します(ページロードで何度も行われる作業を防ぐためにあなた自身のキャッシュを実装しないでください、WPはカバーしています!) 。

ただし、advanced-cache.phpまたはobject-cache.phpを提供するプラグインがあり、WP_Cacheは永続的にすることができます。たとえば、batcacheを使用すると、WP_Cachememcachedを使用してデータを格納し、ページロード間でデータを保持し、パフォーマンスを大幅に向上させることができます。 Redis/memcache/etcにも同様のプラグインがあります。

https://vip.wordpress.com/documentation/ をご覧になることをお勧めします。その一部はWordPress.com VIPプラットフォームに固有のものですが、その他の部分はパフォーマンスとセキュリティにとって重要です。 。キャッシュされていない関数の使用など、他のものを検出するVIP Scannerツールもあります。

9
Tom J Nowell