Lentidão no Magento

Português
, ,

Olá.

Após um exaustivo trabalho de debug no Magento, o Filipe Ibaldo e eu acabamos por descobrir dois problemas no Magento, relacionados à lentidão na conclusão da compra com muitos produtos (produtos diferentes, e não um produto com 100 unidades).

Um dos problemas é o save de cada produto que está no Order, que é executado precisamente em app/code/core/Mage/Sales/Model/Entity/Order/Attribute/Backend/Parent.php, no método afterSave, que demanda MUITO tempo de processamento na minha máquina (Core 2 Duo 2.26/4GB RAM), cerca de 0.3 segundos para cada produto.

Levando em consideração que os clientes deste determinado eCommerce compram, em média, mais de 50 produtos diferentes por compra, esse tempo, somado a outras execuções e server load bastante alto, ultrapassa 1 minuto para efetuar o fechamento da compra, um valor inaceitável.

A solução encontrada foi desabilitar os observers que executam após esse salvamento, que são do Mage_Downloadable e do Mage_Rss:

Em app/code/core/Mage/Downloadable/etc/config.xml, remova/comente as seguintes linhas:

1
2
3
4
5
6
7
8
<sales_order_item_save_commit_after>
    <observers>
        <downloadable_observer>
            <class>downloadable/observer</class>
            <method>saveDownloadableOrderItem</method>
        </downloadable_observer>
    </observers>
</sales_order_item_save_commit_after>

O trecho de código acima aparece duas vezes.

Em app/code/core/Mage/Rss/etc/config.xml, remova/comente as seguintes linhas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<sales_order_save_after>
    <observers>
        <notifystock>
            <class>rss/observer</class>
            <method>salesOrderItemSaveAfterNotifyStock</method>
        </notifystock>
    </observers>
</sales_order_save_after>
<sales_order_save_after>
    <observers>
        <ordernew>
            <class>rss/observer</class>
            <method>salesOrderItemSaveAfterOrderNew</method>
        </ordernew>
    </observers>
</sales_order_save_after>

Feito isso, o tempo do save de cada produto passou de 0.3 segundos para 0.001 segundos, um ganho incrível de velocidade no geral.

Entretanto, vale ressaltar que se você estiver utilizando produtos “baixáveis” ou controle de estoque pelo Magento, essas alterações podem trazer problemas ao sistema, portanto, execute com cuidado a alteração.

Outro problema encontrado por nós foi relacionado com o recurso de desabilitar módulos do Magento, disponível no admin em Sistema > Configuração > Avançado > Avançado > Desabilitar saída dos módulos, o qual, mesmo estando o Mage_Rss e o Mage_Downloadable desabilitados, seus observers continuaram funcionando, sendo necessário remover a pasta do módulo (ou a configuração) para o mesmo parar de funcionar totalmente.

Até mais.