チェックアウトのパフォーマンスのベストプラクティス
Adobe Commerceの チェックアウト プロセスは、ストアフロント体験の重要な側面です。 組み込みの買い物かご機能と チェックアウト 機能に依存しています。
優れた顧客体験を維持するためには、パフォーマンスが重要です。 チェックアウトパフォーマンスを最適化するには、ハイスループット注文処理に対して次のオプションを設定します。
- AsyncOrder:キューを使用して注文を非同期で処理します。
- 繰延合計計算 - チェックアウトが開始されるまで、注文合計の計算を延期します。
- カート読み込み時の在庫チェック - カート商品の在庫検証をスキップすることを選択します。
- 負荷分散 - MySQL データベースとRedis インスタンスのセカンダリ接続を有効にします。
カートの非同期注文、繰延合計計算、および在庫チェック設定オプションの読み込みはすべて独立して機能します。 3つの機能をすべて同時に使用することも、任意の組み合わせで機能を有効または無効にすることもできます。
非同期注文
非同期注文 モジュールは、注文をreceivedとしてマークし、注文をキューに配置し、キューからの注文を先入れ先出し方式で処理する非同期注文の配置を有効にします。 AsyncOrderはデフォルトで 無効 です。
例えば、顧客がショッピングカートに商品を追加し、Proceed to Checkoutを選択したとします。 Shipping Address フォームに入力し、希望する Shipping Method を選択し、支払い方法を選択して注文します。 買い物かごがクリアされ、注文は Received としてマークされますが、製品数量はまだ調整されておらず、顧客に販売メールも送信されません。 注文は受け取りましたが、注文が完全に処理されていないため、注文の詳細はまだ利用できません。 placeOrderProcess コンシューマーが開始されるまでキューに残り、在庫チェック 機能(デフォルトで有効)で注文を確認し、次のように注文を更新します。
- 製品が利用可能 – 注文状況が 保留中 に変更され、製品数量が調整され、注文詳細を含む電子メールが顧客に送信され、正常な注文の詳細が注文と返品 リストに表示され、再注文などの実行可能なオプションが表示されます。
- 在庫切れまたは供給不足 – 注文状況が 拒否 に変更され、製品数量が調整されず、問題に関する注文詳細を含む電子メールが顧客に送信され、拒否された注文詳細が注文と返品 リストで利用可能になり、実用的なオプションはありません。
コマンドラインインターフェイスを使用して、これらの機能を有効にするか、モジュール参照ガイドで定義されている対応するREADME ファイルに従ってapp/etc/env.php ファイルを編集します。
AsyncOrderを有効にするには:
コマンドラインインターフェイスを使用してAsyncOrderを有効にできます。
bin/magento setup:config:set --checkout-async 1
set コマンドは、次の内容をapp/etc/env.php ファイルに書き込みます。
...
'checkout' => [
'async' => 1
]
モジュール参照ガイドのAsyncOrderを参照してください。
AsyncOrderを無効にするには:
コマンドラインインターフェイスを使用してAsyncOrderを無効にできます。
bin/magento setup:config:set --checkout-async 0
set コマンドは、次の内容をapp/etc/env.php ファイルに書き込みます。
...
'checkout' => [
'async' => 0
]
AsyncOrderの互換性
AsyncOrderは、Adobe Commerce機能の一部をサポートしています。
標準チェックアウト
B2B交渉可能な見積もり
代金引換
Braintree
PayPal PayFlow Pro
次の機能は、AsyncOrderでサポートされている not ですが、引き続き同期して動作します。
- サポートされている機能リストに含まれていない支払い方法
- 複数アドレスのチェックアウト
- 管理者注文の作成
Web API サポート
AsyncOrder モジュールが有効になっている場合、次のREST エンドポイントとGraphQLの変更が非同期で実行されます。
REST:
GraphQL:
支払い方法の除外
開発者は、特定の支払い方法をMagento\AsyncOrder\Model\OrderManagement::paymentMethods アレイに追加することで、非同期注文から明示的に除外できます。 除外された支払い方法を使用する注文は、同期して処理されます。
交渉可能な見積もり非同期注文
交渉可能な見積もり非同期注文 B2B モジュールを使用すると、NegotiableQuote機能に対して注文項目を非同期で保存できます。 AsyncOrderとNegotiableQuoteを有効にする必要があります。
繰延合計計算
繰延合計計算 モジュールは、ショッピングカートに対して要求されるまで、または最後のチェックアウト手順の間に合計計算を延期することで、チェックアウトプロセスを最適化します。 有効にすると、顧客がショッピングカートに商品を追加すると、小計のみが計算されます。
既定では、繰延合計計算は 無効 です。 コマンドラインインターフェイスを使用して、これらの機能を有効にするか、モジュール参照ガイドで定義されている対応するREADME ファイルに従ってapp/etc/env.php ファイルを編集します。
DeferredTotalCalculationを有効にするには:
DeferredTotalCalculationを有効にするには、コマンドライン・インタフェースを使用します。
bin/magento setup:config:set --deferred-total-calculating 1
set コマンドは、次の内容をapp/etc/env.php ファイルに書き込みます。
...
'checkout' => [
'deferred_total_calculating' => 1
]
DeferredTotalCalculationを無効にするには:
DeferredTotalCalculationは、コマンドライン・インタフェースを使用して無効にできます。
bin/magento setup:config:set --deferred-total-calculating 0
set コマンドは、次の内容をapp/etc/env.php ファイルに書き込みます。
...
'checkout' => [
'deferred_total_calculating' => 0
]
モジュール参照ガイドのDeferredTotalCalculatingを参照してください。
固定製品税
繰延合計計算が有効になっている場合、製品をショッピングカートに追加した後、固定製品税(FPT)はミニカートの製品価格とカート小計に含まれません。 ミニカートに商品を追加すると、FPTの計算が遅延します。 最終チェックアウトに進むと、FPTがショッピングカートに正しく表示されます。
在庫チェックの無効化
「カートの在庫を有効にする」グローバル設定は、商品をカートに読み込む際に在庫チェックを実行するかどうかを決定します。 在庫チェックプロセスを無効にすると、特にカート内のバルク商品を処理する場合に、すべてのチェックアウト手順のパフォーマンスが向上します。
無効にすると、商品をショッピングカートに追加する際に在庫チェックが行われません。 この在庫確認をスキップすると、在庫切れのシナリオによって他の種類のエラーが発生する可能性があります。 在庫確認 Always は、無効になっている場合でも、注文配置ステップで行われます。
カート読み込み時に在庫チェックを有効にするは、デフォルトで有効になっています(Yesに設定)。 カートの読み込み時に在庫チェックを無効にするには、管理UI ストア > 構成 > カタログ > 在庫 > 在庫オプション セクションで Enable Inventory Check On Cart Load をNoに設定します。 ユーザーガイドの「 グローバルオプションの設定および カタログインベントリ 」を参照してください。
負荷分散
MySQL データベースとRedis インスタンスのセカンダリ接続を有効にすることで、様々なノード間の負荷のバランスを取ることができます。
Adobe Commerceは、複数のデータベースまたはRedis インスタンスを非同期で読み取ることができます。 クラウドインフラストラクチャでCommerceを使用している場合は、.magento.env.yaml ファイルのMYSQL_USE_SLAVE_CONNECTIONおよびREDIS_USE_SLAVE_CONNECTIONの値を編集して、セカンダリ接続を設定できます。 読み取り/書き込みトラフィックを処理する必要があるのは1つのノードのみなので、変数をtrueに設定すると、読み取り専用トラフィック用のセカンダリ接続が作成されます。 値をfalseに設定して、既存の読み取り専用の接続配列をenv.php ファイルから削除します。
.magento.env.yaml ファイルの例:
stage:
deploy:
MYSQL_USE_SLAVE_CONNECTION: true
REDIS_USE_SLAVE_CONNECTION: true