Magento 2 Media Gallery slow loading

Nous avons récemment constaté une lenteur extrême de chargement de la Magento_MediaGallery (nouvelle gallerie ) sur une version 2.4.2 de Magento.

En utilisant un fichier xml : directory.xml nous pouvons choisir d'exclure certains dossiers inutiles.

A placer dans un module déjà déclaré, à la racine de etc/

 

Exemple de fichier directory.xml

<?xml version="1.0"?>
<!--
du -a | cut -d/ -f2 | sort | uniq -c | sort -nr
24/06/22 : 120256 fichiers

-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_MediaGalleryApi:etc/directory.xsd">
    <exclude>
        <patterns>
            <pattern name="amasty">/^amasty/</pattern>
            <pattern name="mageplaza">/^mageplaza/</pattern>
            <pattern name="icirelais_remove">/^icirelais/</pattern>
            <pattern name="css">/^css/</pattern>
            <pattern name="ampromo">/^ampromo/</pattern>
            <pattern name="amshopby">/^amshopby/</pattern>
            <pattern name="atos">/^atos/</pattern>
            <pattern name="catalog">/^catalog/</pattern>
            <pattern name="clnews">/^clnews/</pattern>
            <pattern name="dhl">/^dhl/</pattern>
            <pattern name="dpdfrance">/^dpdfrance/</pattern>
            <pattern name="xmlconnect">/^xmlconnect/</pattern>
            <pattern name="mageworks">/^mageworks/</pattern>
            <pattern name="mageworks">/^sitemap/</pattern>

        </patterns>
    </exclude>
</config>

C'est le fichier ExcludedPatternsConfig par sa fonction get qui fait l'exclusion :

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\MediaGallery\Model\Directory;

use Magento\Framework\Config\DataInterface;
use Magento\MediaGalleryApi\Model\ExcludedPatternsConfigInterface;

/**
 * Media gallery directory config
 */
class ExcludedPatternsConfig implements ExcludedPatternsConfigInterface
{
    private const XML_PATH_EXCLUDED_PATTERNS = 'exclude/patterns';

    /**
     * @var DataInterface
     */
    private $data;

    /**
     * @param DataInterface $data
     */
    public function __construct(DataInterface $data)
    {
        $this->data = $data;
    }

    /**
     * Returns list of blacklist regexp patterns
     *
     * @return array
     */
    public function get() : array
    {
        return $this->data->get(self::XML_PATH_EXCLUDED_PATTERNS);
    }
}

 

Si vous utilisez encore la vieille version du module Gallerie de Magento, utilisez plutôtun fichier di.xml pour faire vos exclusions :

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <type name="Magento\Cms\Model\Wysiwyg\Images\Storage">
        <arguments>
            <argument name="dirs" xsi:type="array">
                <item name="exclude" xsi:type="array">
                    <item name="ampromo" xsi:type="array">
                        <item name="regexp" xsi:type="boolean">true</item>
                        <item name="name" xsi:type="string">pub[/\\]+media[/\\]+ampromo[/\\]*$</item>
                    </item>
                    <item name="amshopby" xsi:type="array">
                        <item name="regexp" xsi:type="boolean">true</item>
                        <item name="name" xsi:type="string">pub[/\\]+media[/\\]+amshopby[/\\]*$</item>
                    </item>
                    <item name="bannerslider" xsi:type="array">
                        <item name="regexp" xsi:type="boolean">true</item>
                        <item name="name" xsi:type="string">pub[/\\]+media[/\\]+banner[/\\]*$</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </type>

</config>

 

Comment basculer sur la nouvelle gallerie (à partir de 2.4.x)  : https://experienceleague.adobe.com/docs/commerce-admin/content-design/media/gallery/media-gallery.html?lang=en

Bonne optimisation