WP_Query()の条件としてpost__not_inを使用して特定のIDを持つ投稿や自IDを除外するケースは結構多いと思います。
でも自作プラグインなどでこのpost__not_inで条件指定したコードを作成してPlugin Checkにかけると、以下のように指摘されることがあります。
Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://wpvip.com/documentation/performance-improvements-by-removing-usage-of-post__not_in/ for more information.
上記のリンク先ページによれば、WP_Query()で現在の投稿IDを除くものを〇件抽出して出力するよりも、全件取得した中で現在の投稿IDを除く〇件を出力したほうが効率がいいとのことなのですが、どう考えても個人的に前者の方が効率がいいのでは?と思ったのでどういうことなのか調べてみました。
結論としては、クエリーをキャッシュする機能を追加した時に違いがあるというのが正確なところのようです。
要はいわゆるキャッシュ系プラグインやCDNを使用した際には、一度条件指定して取り出したデータを一定期間保存してその中から条件によって絞り込んで出力することで処理速度を速めることをするので、その場合には、後者の方が効率がいいということです。
なかなか難しいところですが、このキャッシュ機能はWordPress標準で実装されているものではないようなので、逆にキャッシュ系プラグインを使用しない場合では後者だといちいち全件を取得することになるので処理に時間がかかったり、余計に負荷がかかってしまう可能性があるかも知れないということです。
あくまで個人の見解ですが、環境の分かる自身のサイトで使用する場合や、パフォーマンスに著しい影響がない(処理して表示するまでに時間がかかったり、サーバーに異常な負荷がかかったり)場合には素直にpost__not_inを使用したほうがコードも簡潔だし、確実に除外できると思います。
コメントを残す