キャッシュとパフォーマンス

コンポーネントおよびGraphQLの応答キャッシュ

AEM CIF コアコンポーネントには、個々のコンポーネントの GraphQL 応答をキャッシュするための組み込みのサポートが既にあります。この機能は、GraphQL バックエンド呼び出しの数を大幅に減らすために使用できます。効果的なキャッシュは、特に、ナビゲーションコンポーネントのカテゴリツリーを取得したり、製品検索ページやカテゴリページに表示される利用可能なすべての集計/ファセット値を取得するなど、繰り返しクエリで実現できます。

AEM CIF コアコンポーネントの場合、キャッシュはコンポーネント単位で設定されるので、各コンポーネントに対して GraphQL 要求/応答をキャッシュするかどうか(およびその長さ)を制御できます。GraphQL クライアントを使用して、OSGi サービスのキャッシュ動作を定義することもできます。

設定

特定のコンポーネントに対して設定が完了すると、各キャッシュ設定エントリで定義された GraphQL クエリと応答の格納が開始されます。キャッシュのサイズと各エントリのキャッシュ期間は、カタログデータの変更頻度や、コンポーネントが常に最新のデータを表示することの重要度などに応じて、プロジェクト単位で定義します。 キャッシュの無効化はおこなわれないので、キャッシュの期間を設定する際は注意が必要です。

コンポーネントのキャッシュを設定する場合、キャッシュ名は、プロジェクトで定義する​プロキシ​コンポーネントの名前にする必要があります。

クライアントがGraphQL要求を送信する前に、完全に​同じGraphQL要求が既にキャッシュされているかどうかを確認し、キャッシュされた応答を返す場合があります。 GraphQL リクエストは完全に一致する必要があります。つまり、クエリ、操作名(存在する場合)、変数(存在する場合)はすべてキャッシュされたリクエストと等しく、また、設定されているカスタム HTTP ヘッダーも同じでなければなりません。例えば、Magento Store ヘッダーは一致する必要があります。

製品の検索ページおよびカテゴリページに表示される利用可能なすべての集計/ファセット値を取得する検索サービスのキャッシュを設定することをお勧めします。これらの値は通常、例えば新しい属性が製品に追加された場合にのみ変更されるので、製品属性のセットが頻繁に変更されない場合、このキャッシュエントリの期間は「長く」なる可能性があります。これはプロジェクトに固有のものですが、プロジェクト開発段階では数分の値を使用し、安定した実稼働システムでは数時間の値を使用することをお勧めします。

これは通常、次のキャッシュエントリを使用して設定します。

com.adobe.cq.commerce.core.search.services.SearchFilterService:true:10:3600

GraphQl キャッシュ機能の使用を推奨する別のシナリオの例として、ナビゲーションコンポーネントが挙げられます。これは、すべてのページで同じ GraphQL クエリが送信されるからです。この場合、キャッシュエントリは通常次の値に設定されます。

venia/components/structure/navigation:true:10:600

Venia参照用ストアを使用する場合。 CIF ナビゲーションコンポーネント名( core/cif/components/structure/navigation/v1/navigation)では​なく、コンポーネントプロキシ名(venia/components/structure/navigation)が使用されることに注意してください。

他のコンポーネントのキャッシュは、通常は Dispatcher レベルで設定されたキャッシュと連携して、プロジェクト単位で定義する必要があります。これらのキャッシュはアクティブに無効化されないので、キャッシュ期間は慎重に設定する必要があります。すべての可能なプロジェクトや使用例に適切である「フリーサイズ」の値はありません。プロジェクトの要件に最も適したプロジェクトレベルでキャッシュ方法を定義してください。

Dispatcher のキャッシュ

AEM Dispatcher 内の AEM ページまたはフラグメントのキャッシュは、どの AEM プロジェクトに対してもベストプラクティスです。通常、AEM で変更されたコンテンツの Dispatcher での適切なアップデートは、無効化の手法に依存します。これは、AEM Dispatcher のキャッシュ方法の中心となる機能です。

純粋な AEM で管理されるコンテンツ CIF に加えて、通常、ページには、GraphQL を介して Magento から動的に取り込まれたコマースデータを表示できます。ページ構造自体は変更されない場合がありますが、コマースのコンテンツは変更される場合があります。例えば、商品データ(名前や価格など)がMagentoで変更される場合などです。

AEM DispatcherでCIFページを限られた時間だけキャッシュできるようにするため、AEM DispatcherでCIFページをキャッシュする際には、時間ベースのキャッシュの無効化(TTLベースのキャッシュとも呼ばれます)を使用することをお勧めします。 この機能は、追加の ACS AEM Commons パッケージを使用して AEM で設定できます。

TTL ベースのキャッシュを使用する場合、デベロッパーは通常、選択した AEM ページに対して 1 つまたは複数のキャッシュ期間を定義します。これにより、CIFページは設定された期間までAEM Dispatcherにのみキャッシュされ、コンテンツは頻繁に更新されます。

メモ

サーバー側のデータはAEM Dispatcherによってキャッシュされる場合がありますが、 productproductlistsearchresultsなどのCIFコンポーネントは、通常、ページの読み込み時にクライアント側のブラウザーリクエストで製品の価格を再取得します。 これにより、ページの読み込み時に重要な動的コンテンツが常に取得されます。

その他のリソース

このページ