ACSD-50858 : performances améliorées pour le chargement du contenu des bannières

Le correctif ACSD-50858 corrige un problème de performances de bannière dans la page panier/passage en caisse : requêtes DB excessives et temps de chargement de page accru. Ce correctif est disponible lorsque Quality Patches Tool (QPT) 1.1.31 est installé. L’ID de correctif est ACSD-50858. Veuillez noter que le problème doit être corrigé dans Adobe Commerce 2.4.7.

Produits et versions concernés

Le correctif est créé pour la version Adobe Commerce :

  • Adobe Commerce (toutes les méthodes de déploiement) 2.4.5-p1

Compatible avec les versions d’Adobe Commerce :

  • Adobe Commerce (toutes les méthodes de déploiement) 2.4.4 - 2.4.6
NOTE
Le correctif peut devenir applicable à d’autres versions avec de nouvelles versions Quality Patches Tool. Pour vérifier si le correctif est compatible avec votre version Adobe Commerce, mettez à jour le package magento/quality-patches vers la dernière version et vérifiez la compatibilité sur la Quality Patches Tool : recherchez des correctifs sur la page. Utilisez l’ID de correctif comme mot-clé de recherche pour localiser le correctif.

Problème

Les performances de la bannière sont affectées dans le panier/la page de passage en caisse en raison de requêtes DB excessives et d’une augmentation du temps de chargement des pages.

Ce problème a été corrigé en refactorisant la manière dont le contenu des bannières est chargé, ce qui a réduit le nombre de requêtes DB de 99,99 % et le temps de chargement de la page de ~99 %.

Étapes à reproduire :

  1. Connectez-vous à Admin et créez un produit simple.

  2. Créez un client, à partir de l’administrateur ou de l’interface utilisateur frontale, et ajoutez-lui une adresse de livraison.

  3. Déplacez banners.php vers le dossier magento_root/pub/.

  4. Générez des bannières à l’aide de la commande php pub/banners.php. Il génère 10 000 bannières simples et 1 000 bannières avec des règles de vente.

  5. Connectez-vous au client créé précédemment sur le front-end.

  6. Ajoutez le produit créé précédemment au panier.

  7. Accédez à la page de passage en caisse (passage en caisse/panier).

  8. Surveillez le temps de chargement de la requête banner/ajax/load :

    • Sans bin/magento dev:query-log:enable

    • Avec bin/magento dev:query-log:enable

      code language-none
      grep 'magento_banner_content' var/debug/db.log  | wc -l
      

Résultats attendus :

Diminuez le nombre de requêtes DB pour magento_banner_content et le temps de chargement des pages de panier/passage en caisse.

Résultats réels :

Augmentation du nombre de requêtes DB pour magento_banner_content et du temps de chargement des pages de panier/passage en caisse.

Appliquer le correctif

Pour appliquer des correctifs individuels, utilisez les liens suivants en fonction de votre méthode de déploiement :

Informations supplémentaires

banners.php content :

\Banner::class);
    $banner->setIsEnabled(
        \Magento\Banner\Model\Banner::STATUS_ENABLED
    )->setName(
        'Test Dynamic Block '.$i
    )->setTypes(
        ''
    )->setStoreContents(
        [0 => 'Dynamic Block Content '.$i]
    )->save();
}

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

/** @var \Magento\SalesRule\Model\Rule $salesRule */
$salesRule = $objectManager->create(\Magento\SalesRule\Model\Rule::class);
$salesRule->setData(
    [
        'name' => '50% Off ',
        'is_active' => 1,
        'customer_group_ids' => [\Magento\Customer\Model\GroupManagement::NOT_LOGGED_IN_ID],
        'coupon_type' => \Magento\SalesRule\Model\Rule::COUPON_TYPE_NO_COUPON,
        'conditions' => [
            [
                'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class,
                'attribute' => 'base_subtotal',
                'operator' => '>',
                'value' => 0
            ]
        ],
        'simple_action' => 'by_percent',
        'discount_amount' => 50,
        'discount_step' => 0,
        'stop_rules_processing' => 1,
        'website_ids' => [
           1
        ]
    ]
);
$salesRule->save();

for ($i = 0; $i < 1000; $i++) {

    $banner = $objectManager->create(\Magento\Banner\Model\Banner::class);
    $banner->setData(
        [
            'name' => 'Get 50% Off ',
            'is_enabled' => \Magento\Banner\Model\Banner::STATUS_ENABLED,
            'types' => [], /*Any Banner Type*/
            'store_contents' => ['<img src="http://example.com/banner_40_percent_off.png" />'],
            'banner_sales_rules' => [$salesRule->getId()],
        ]
    );
    $banner->save();
}

Lecture connexe

Pour en savoir plus sur Quality Patches Tool, voir :

Pour plus d'informations sur les autres correctifs disponibles dans QPT, reportez-vous à Quality Patches Tool : Recherche de correctifs dans le guide Quality Patches Tool.

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a