web-dev-qa-db-ja.com

用語に関連する追加データを整理してキャッシュする方法

私は自分のプラグインを更新していますが、特定の機能を組み込むための「最善の方法」を見つけるのに苦労しています。プラグインを使用すると、ユーザーは自分のメディアライブラリの画像を任意の分類法の任意の用語に関連付けることができます。私は現在、ユーザーが自分のテーマやプラグインに追加してプラグインによって保存されたデータを取得できるような機能の作成に取り組んでいます。私がこれまでに持っているコードはここで見ることができます: https://github.com/mfields/Taxonomy-Images/blob/master/public-filters.php

このファイルで提供されている機能により、ユーザーは現在分類されている用語の画像を取得することができます(分類アーカイブビューの場合)。別の関数は基本的にコア関数get_terms()のラッパーです。各用語オブジェクト。リリース前にファイルに3番目の関数を追加したいと思います。これはget_the_terms()のラッパーになり、画像を持つグローバル投稿オブジェクトに関連するすべての用語を返します。

画像ファイルのキャッシュを組み込んだget_the_terms()関数の後にget_terms()関数をモデル化することを考えていました。しかし、この関数がアーカイブテンプレートのループ内で使用された場合に何が起こるのか、ちょっと怖いです。

基本的に、ワークフローは次のようになります。

  1. すべての画像と用語の関連付けを取得します(0クエリ)。
  2. グローバル投稿に関連する用語を入手:get_the_terms()(0クエリ)。
  3. 用語に関連付けられているすべての画像をクエリします(3クエリ)。これは、すべてのイメージIDのリストを作成し、それらをincludeパラメータを介してget_posts()に渡すことによって行われます。

私見これは単一のビュー(single.php、page.phpなど)で行うのは問題ありませんが、ユーザーがアーカイブビューのループ内でこの関数を使用するとどうなりますか? 3つのクエリ(get_posts()によって生成される)に1ページあたりの投稿数の設定値(デフォルトのWordPressインストールでは10)を掛ける必要があります。だから今私たちは30の合計クエリにいます。それはちょっと醜く速くなります!特に、ユーザーが複数の分類からの画像を表示したい場合。 1件の投稿につき2つの分類法を使用すると、WordPressの処理に60が追加されます。

基本的に進むべき道はいくつかありますが、このような状況であなたが何をするかを知りたいです。

  1. 機能をまったく構築しないでください。

  2. アーカイブビューでget_the_terms()を使用する場合は、関数を構築してキャッシュプラグインをインストールする必要があることをユーザーに知らせます。

  3. アーカイブテンプレートがロードされる前にすべての画像をキャッシュする関数を作成します+別の関数を作成します。この処理には次のようなものが含まれます。$posts配列が生成された後(ただしテンプレートがロードされる前)、すべての分類法の繰り返しごとにget_the_terms()を呼び出して、配列内のすべての投稿をループ処理します。すべてのtermオブジェクトの出力は新しい配列に格納されます。次に、どの画像がすべての分類法の各用語に関連付けられているかを判断し、その画像IDをワンショットでget_posts()に渡します。これにより、30、60、または90ではなく、3つのクエリですべての画像情報をテンプレートで使用するためにキャッシュできます。

私見3は行くべき論理的な方法のように思えるが、それが反最適化であるかどうか私は本当によくわからない。

これについてあなたの考えを教えてください!

5
mfields

私はあなたの3番目の選択肢が進むべき道だと思います。

ちなみに、なぜ組み込みの WP_Cache API を使うのではなく、あなた自身の静的キャッシュをtaxonomy_image_plugin_get_associations()にロールインしたのですか? wp_cache_getがここでうまくいかない理由はありますか? WPオブジェクトキャッシュを使うのは、人々がキャッシングプラグインを有効にしているときにもっとよく最適化するように思えます。

1
goldenapples