---
title: "非同期通話とキャッシュの理解"
slug: "understanding-asynchronous-calls-and-caching"
abstract: "Commerce Searchの結果表示の利点は、Product Listレンダリングと比較してAJAX呼び出しやキャッシュの面で見られます。"
---
# 非同期通話とキャッシュの理解

Commerce Search Resultsレンダリングは、非同期コールやキャッシュをProduct Listレンダリングとは異なる方法で処理します。どのレンダリングを使うかを判断するためには、[違い](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/choosing-between-available-renderings-for-product-lists.html "Choosing between available renderings for product lists") を理解することが重要です。

> !注Commerce Search Resultsレンダリングの利用をお勧めします。なぜなら、最も柔軟性が高いからです。

## Commerce Search結果によるAJAX呼び出しの表示

Commerce Search Resultsレンダリングは標準SXA Search Resultsレンダリングの拡張です。SXA Search結果レンダリングは[SXA Searchサービス](https://doc.sitecore.com/xp/en/developers/sxa/100/sitecore-experience-accelerator/en/the-sxa-search-service.html) を利用してAJAXコールを行い、インデックスをクエリしてレンダリングするアイテムのリストを取得します。生成されたアイテムは設定されたレンダリングバリアントによってサーバーサイドで処理され、結果はマークアップとして返HTMLされます。

ProcessSearchItemsパイプラインはSXA Searchサービスの拡張ポイントです。設定されたスコープクエリから返されたアイテムを処理し、設定されたレンダリングバリアントがさらに処理する前に関連モデルを入力する役割を担います。このパイプラインを拡張して、Sitecoreアイテムを含むSearchItemパイプライン引数や、タイプオブジェクトのカスタムモデルを埋め込むことができます。ProcessSearchItemsパイプラインはPrepareSearchItemsというコマースプロセッサで拡張されています。このプロセッサはコマースエンジンから価格と在庫情報を取得し、データをProductSummaryViewModelに変換します。このモデルはCommerce Search Results Scribanテンプレートからo\_model変数を使ってコンテンツのレンダリングにアクセスします。プロセッサがデータを実行・取得するかどうかは、設定や設定によって異なります。

ストアフロントの設定(*/sitecore/Content///Settings/Commerce/Search Results Configuration*)では、Commerce Search Resultsレンダリングでどのコールを使うか、いつ実行されるかを設定できます。「 **価格と在庫情報を取得するために別のAJAXコールを使う** 」チェックボックスはデフォルトでクリアされており、レンダリングは1回の呼び出しを行います。

このコールの一環として、コマースProcessSearchItemsプロセッサは価格および在庫データを実行・取得します。このデータは、レンダリングバリアントが処理される際に価格や在庫情報を出力するためにScribanテンプレートで使用されます。

[Content Delivery Network](https://docs.microsoft.com/en-us/azure/cdn/cdn-overview)(CDN)を使わない場合、パフォーマンスの観点から1回の通話を使うのが最も効率的な構成です。これは、クライアントブラウザからマークアップや価格・在庫情報を取得するためにAJAXコールが1回だけ行われるためです。ただし、CDNを使用している場合は、価格や在庫情報もキャッシュしていることに注意してください。これは望ましくない場合があります。なぜなら、価格や在庫は商品情報よりも頻繁に変動する傾向があるからです。

> !注商品やプライスカードで価格を変更したり、すでにCDNでキャッシュされている特定の商品のプロモーションを追加したりしても、XCからCDNキャッシュを強制的にクリアする方法はありません。これらは別途行うか、カスタムスクリプトの一部として行うか、ビジネスツールとのカスタム統合として行う必要があります。このため、CDNを使用している場合は2つのAJAXコールを使用することを推奨します。

「 **価格と在庫情報を取得するために別個のAJAXコール** を使う」チェックボックスを選択すると、Commerce Search Resultsレンダリングはカタログ項目のリストをレンダリングする際に非同期のJavaScriptとAJAXの呼び出しを2回行います。

-   [最初の呼び出し](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/understanding-asynchronous-calls-and-caching.html#UUID-44a4aa7e-2510-f68a-c6d4-d4f464c556db_section-idm4672344811200031521364950622 "First call - SXA Search Service AJAX call")はインデックスを照会し、レンダリングするアイテムのリストを取得します。Commerce Search ResultsレンダリングはSXA Searchサービスを呼び出し、HTMLマークアップとしてアイテムを返し、レンダリングバリアントによってサーバー側で処理されます。Commerce ProcessSearchItemsプロセッサは価格や在庫データを取得したり、ProductSummaryViewModelを埋め込んだりするためにCommerce Engineを呼び出しません。価格やステータスの変動性が存在せず、カタログアイテムのリストや製品内容が比較的安定しているため、CDNを使用する場合は適切な有効期限でこのコールをキャッシュすることを推奨します。
    
-   [2つ目の呼び出し](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/understanding-asynchronous-calls-and-caching.html#UUID-44a4aa7e-2510-f68a-c6d4-d4f464c556db_section-idm4496629797027231521374851403 "Second call - GetSellableItemsSummary AJAX call")は商業専用です。これはカタログ品目リストのマークアップを取得した後に行われ、商品リストの価格と在庫情報を取得するためにコマースエンジンで行われます。データはJSON形式で返されます。
    
    > !注このコールをキャッシュすることは推奨しません。価格や株価情報は頻繁に変動する可能性が高いためです。
    
    このコールは最初の呼び出しと並行して行うことはできません。なぜなら、そのクエリパラメータの一つであるProduct IDのリストは、最初の呼び出しから取得した応答データに依存しているからです。このコールは、Product IDのリストが入力され、空でなくなった場合にのみ行われます。価格と在庫情報が受信されると、Knockout JSバインディングでマークアップにバインドされ、それに応じて更新されます。価格情報と在庫情報は、それぞれprice属性とstockLabel属性にバインドされます。2回目の通話のJavaScriptコードは*、/sitecore/Media library/Base Themes/Commerce Components Theme/Scripts/Catalog/catalog-commerce-search-results-model/*に保存されたcatalog-commerce-search-results-modelスクリプトに位置しています。
    

### 最初の呼び出し - SXA Search AJAXサービス通話

**フルURL**:http://host name/sxa/commercesearch/CommerceResults/?usedam= use images from DAM&l=language&amp;s=scope&amp;itemid=current item id&amp; sig=search result signature&amp;p=page size&amp;o=sort order&amp;v=rendering variant id

例: http://mqa-ts-02-dk1//sxa/commercesearch/CommerceResults/?usedam=true&l=en&amp; s={9DCE2EF2-EE0C-4C02-B2ED-A8769FC08C3B}&amp; itemid={994EC8CB-FE90-5071-A631-4458B1E83DB3}&amp; sig=category-page&amp; p=12&amp; o=Display name,Ascending&amp; v={175DC0A7-7214-450A-8765-688D62A551D1}

**HTTPメソッド**: GET

以下の表は、このコールで使用されたパラメータを詳述しています。

パラメータ

使用方法

Usedam

画像リンクをDAMから取得する(「true」に設定した場合)かMedia Libraryから取得する場合、「false」に設定した場合の画像リンクを取得するかを示す設定パラメータです。

結果の言語バージョンを指定します。

結果のフィルタリングに使われるスコープ項目を指定します。

項目

現在のコンテキストアイテム ID。

シグ

商取引検索結果の署名。

ページサイズ。

特定のフィールドの結果を昇順または降順に並べること。

変種定義ID。

### 2回目の通話 - GetSellableItemsSummary AJAX通話

**フルURL**: https://host name/api/cxa/Catalog/GetSellableItemsSummary?sc\_site=site name

例: https://mqa-ts-02-dk1/api/cxa/Catalog/GetSellableItemsSummary?sc\_site=Storefront

**HTTPメソッド**: POST

以下の表は、このコールで使用されたパラメータを詳述しています。

パラメータ

使用方法

itemIds

製品リストの製品IDとカタログ名を指定します。  
  
例:Habitat\_Master|6042976|

includeBundledItems

結果にバンドルアイテムも含まれます。  
  
例:真

## AJAXが呼ぶ製品リストおよびプロモート製品

製品リストレンダリングはAJAX呼び出しを1回のみ行います。この呼び出しは製品情報だけでなく価格や在庫情報も取得し、Knockout JSを使ってHTMLマークアップにバインドされたJSONとして返します。製品リストレンダリングには、CDインスタンスレベルで処理される[AJAXコール](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/configure-the-product-list-cache.html "Configure the Product List cache")キャッシュのサポートが組み込まれています。

プロモート製品レンダリングはプロダクトリストのレンダリングに似ていますが、プロダクトリストの取得方法と、組み込みのAJAXコールキャッシュをサポートしていない点が異なります。

> !注両方のレンダリングは、分散型およびジオロケーション型キャッシュ機能を活用するために、Content Delivery Network (CDN)を使用する際にAJAXコールキャッシュをサポートしています。 [CDN](https://docs.microsoft.com/en-us/azure/cdn/cdn-how-caching-works)キャッシュは、静的リソースがユーザーによりローカルなサーバーに保存されるため、組み込みキャッシュよりも優れています。AJAX通話のキャッシュがオンになると、コンテンツだけでなく価格や在庫情報もキャッシュされます。これは、商品コンテンツを価格や在庫情報の取得と別にキャッシュできるCommerce Search Resultsレンダリングに比べて柔軟性が劣ります。

### GetProductList Ajaxコール

GetProductList Ajaxの呼び出しはインデックスをクエリし、商品リストの価格および在庫情報とともにJSON形式で表示するアイテムのリストを取得します。この呼び出しはCommerce componentsレイヤーに行います。

**フルURL**: http://host name/api/cxa/catalog/GetProductList?sc\_site=site name

**例:**http://mqa-ts-02-dk1/api/cxa/catalog/GetProductList?sc\_site=Storefront

**HTTPメソッド**: POST

以下の表は、このコールで使用されたパラメータを詳述しています。

パラメータ

使用方法

ページ

ページを指定する。

追伸

ページサイズを指定します。

SD

ソートの方向(asc / dsc)。

CCI

キャッシュキーを作成するために使われている現在のコンテキストアイテムIDです。

CI

現在のカタログカテゴリーの項目です。