Por que o Magento é tão lento? [fechadas]

138

O Magento geralmente é tão terrivelmente lento?

Esta é a minha primeira experiência com ele e o painel de administração simplesmente leva anos para carregar e salvar as alterações. É uma instalação padrão com os dados de teste.

O servidor em que está hospedado serve outros sites não Magento super rápido. O que é o código PHP que o Magento usa que o torna tão lento e o que pode ser feito para corrigi-lo?

senhor-euro
fonte
12
Em que hardware você está executando? Magento precisa de algum suporte sério de hardware na minha experiência.
jitter
3
Não estou pedindo suporte, mas código. Minha esperança era que alguém tivesse experimentado isso no passado e otimizado o código para evitar um comportamento tão lento. Não tenho um trecho de código específico para apontar, pois é aplicável em todo o site. Vou ter que olhar mais a fundo.
Mr-euro
18
O Magento possui mais de 6000 arquivos de classe e é construído para uso corporativo e não para uso doméstico. Sem a APC, não pense em instalá-la. Não o recomendo para pequenas lojas.
Elzo Valugi 11/03/10
1
Em relação à sua bandeira, @Jonesome: essa pergunta é muito ampla e ... provavelmente um pouco datada neste momento. Dito isso, agora temos um site dedicado para problemas do Magento ( Magento ), que provavelmente seria um bom recurso para quem trabalha para otimizar sua configuração.
Shog9
1
@ Shog9 Eu gerencio uma equipe que desenvolve e suporta add-ons para magento. Posso dizer que esse problema exato surge quase diariamente. O Magento não é um aplicativo de lâmpada "normal", pois é muito (muito) intensivo em recursos. Este tópico é importante. Fechá-lo força essa conversa comum de SO, o que é lamentável para todos.
Jonesome Reinstate Monica

Respostas:

183

Eu só estive tangencialmente envolvido na otimização do desempenho do Magento, mas aqui estão algumas razões pelas quais o sistema é tão lento

  1. Partes do Magento usam um sistema de banco de dados EAV implementado no MySQL. Isso significa consultar uma única "coisa" geralmente significa consultar várias linhas

  2. Há muitas coisas nos bastidores (configuração do aplicativo, configuração do sistema, configuração do layout etc.) que envolvem a construção de árvores XML gigantes na memória e, em seguida, "consulta" a essas mesmas árvores para obter informações. Isso requer memória (armazenamento das árvores) e CPU (análise das árvores). Alguns deles (especialmente a árvore de layout) são enormes. Além disso, a menos que o cache esteja ativado, essas árvores são criadas a partir de arquivos no disco e em cada solicitação .

  3. O Magento usa seu sistema de configuração para permitir que você substitua as classes. Esse é um recurso poderoso, mas significa que sempre que um modelo, auxiliar ou controlador é instanciado, instruções PHP adicionais precisam ser executadas para determinar se é necessário um arquivo de classe original ou um arquivo de classe de substituição. Isso acrescenta-se.

  4. Além do sistema de layout, o sistema de modelos do Magento envolve muitas renderizações recursivas. Isso acrescenta-se.

Em geral, os Magento Engineers foram encarregados, em primeiro lugar, de criar o sistema mais flexível e personalizável possível e se preocupar com o desempenho posteriormente.

A primeira coisa que você pode fazer para garantir um melhor desempenho é ativar o cache (Sistema -> Gerenciamento de cache). Isso aliviará parte do bloqueio de CPU / disco que ocorre enquanto o Magento está construindo suas várias árvores XML.

A segunda coisa que você deseja fazer é garantir que seu host e equipe de operações tenham experiência em ajustar o desempenho do Magento. Se você está contando com o plano de US $ 7 / mês para vê-lo, boa sorte com isso.

Alan Storm
fonte
10
Obrigado pela extensa explicação. Magento é realmente muito poderoso, permitindo flexibilidade. Inicialmente, pensei que era simplesmente a gravação do banco de dados interrompida devido a algum SQL mal gravado, mas agora percebo que há muito mais acontecendo nos bastidores do que o esperado inicialmente. Observação: o armazenamento em cache foi desativado devido à adição de produtos pelo proprietário da loja. Quando o cache estava ativado, ele reclamou que os produtos não apareciam, forçando-me a desativar o cache enquanto a loja estava sendo montada. Ele está sendo hospedado em um servidor dedicado, mas parece que terei que mudar o Magento para sua própria caixa exclusiva.
Mr-euro
4
Eu criei um perfil há um tempo atrás com o XHProf. A análise de XML levou uma quantidade enorme de tempo - acho que você está no topo desta lista.
Morgan Tocker 19/07/10
1
Eu queria saber se a execução do Magento no HHVM tornaria isso melhor. A última vez que verifiquei que o HHVM não suporta o Magento, mas se fosse feito, isso ajudaria?
Bharadwaj Srigiriraju 21/01
1
Isso explica muito. O saber é metade da batalha. Não vejo como isso não pode ser considerado construtivo.
flcoder
Não se esqueça de otimizar os arquivos do carregador automático do compositor (consulte as diretrizes de desempenho do magento), se você usar o compositor e - no Magento2 - ativar o modo de produção! O verniz também é uma boa ideia, desde que seu aplicativo não tenha problemas com o cache de página inteira.
Dmitri Sologoubenko
54

Além das recomendações de Alan Storm sobre armazenamento em cache, há duas coisas que eu recomendo especificamente que você analise relacionadas ao armazenamento em cache:

- Verifique se o cache está no memcached, e não no disco.

Eu cuido de algumas instalações do magento e, assim que você obtém qualquer tipo de carga no sistema, o memcached começa a funcionar muito mais rapidamente. E é muito fácil mudar isso (em relação a fazer outras coisas de magento, pelo menos!)

Um bom ponto de partida está aqui: http://www.magentocommerce.com/boards/viewthread/12998/P30/ - mas se você nunca usou o memcached antes, vale a pena examinar também algumas informações gerais.

- Ative o modelo / visualize o cache.

Este é um bom artigo: http://inchoo.net/ecommerce/magento/magento-block-caching/

Existem bons no site magento também (cache do google magento block), mas está desativado no momento.

Para adicionar meus dois centavos ao cache do bloco, aconselho que você crie seus próprios blocos em / app / code / local, estendendo os principais e definindo os parâmetros do cache, nomeie-os como xxx_Cache e atualize seu layout para usar esses blocos dos principais. Dessa forma, você evita perder suas alterações ou interromper o sistema ao atualizar o magento.

Benlumley
fonte
3
Thx pelos pontos. Vou dar uma olhada no memcached que não usei antes na produção. Boa ideia sobre a clonagem dos blocos também.
mr-euro
3
Segundo o que Benlumbey disse, não uso o memcached enquanto estou executando o Windows Server, mas armazeno o diretório / var em uma unidade de estado sólido e isso fez uma grande diferença para mim.
Rick J
@ Rickj - Sim, qualquer coisa para tornar a pasta ./var mais rápida definitivamente ajuda, tentei usar o tmpfs antes do memcached também, e recebi um impulso decente disso também.
21139 benlumley
Eu adicionaria para usar o cache do apc para apenas um nó, pois parece ter menos sobrecarga do que o memcached para o ambiente de vários nós.
sbditto85
2
Sim, verdade. Mas existem algumas ressalvas, dependendo de como você executa o PHP, você pode acabar com um cache APC separado para cada processo PHP - o que fica ainda menos otimizado se você estiver alternando seus processos PHP a cada X requisições.
benlumley
23

Se você ainda não o viu, o Magento e a Rackspace se uniram para criar um white paper sobre o desempenho do Magento. É excelente. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highlyavailable-magento-stores-powered-by-rackspace-solutions/

--- editar ---

Outro ótimo recurso, recém-disponível (outubro de 2011), é: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Obrigado por Alan Storm neste caso.)

Laizer
fonte
Obrigado pela atualização, vou ler em profundidade mais tarde.
mr-euro
2
Esse segundo link está morto agora.
Laizer 30/03
1
O primeiro link também está morto.
20916 Edward Edward
Os links estão quebrados. Ner
Ner
1
Link direto para o White Paper da Rackspace (link # 1).
Levi Figueira
17

Possivelmente, também existe uma razão muito óbvia pela qual sua interface de administração é muito lenta. O Magento possui um módulo chamado Mage_AdminNotification. Tente desativar essa extensão. Porque o que faz é consultar o magentocommerce.com para novas mensagens de atualização. Se os servidores estiverem lentos, sua página de administrador aguardará e ficará lenta devido ao atraso na rede e ao carregamento das notícias externas. Se você protegeu a conexão do servidor de saída por meio de um firewall, isso pode ser ainda mais frustrante, pois a interface do administrador aguardará o tempo limite quando não puder alcançar o magentocommerce.com

Para desativá-lo: vá para Sistema -> Configuração, role para baixo e pressione Avançado (na seção Avançado). Agora desative Mage_AdminNotificatione salve!

Sam Figueroa
fonte
4
Isso fez uma diferença significativa no desempenho no meu ambiente de desenvolvimento local, o que sempre me frustrou o quão lento ele era executado em uma caixa de desenvolvimento muito rápida. Obrigado!
Random_user_name
No Magento2: Armazena-> Configuração-> Avançado-> Avançado e depois desativa Mage_AdminNotification.
23817 Scott C Wilson
6

Eu só tenho uma experiência superficial com o Magento. Eu o instalei em um servidor de grade compartilhado e o carregamento da página foi sombrio ~ 5 + segundos. Em uma cotovia, eu instalei no meu servidor dedicado otimizado para sites CMS, e me senti muito, muito ágil.

Minha hospedagem dedicada tinha ~ 10 Joomla! sites e um site VBullitin em execução.

Meu palpite é que simplesmente não terá desempenho em hospedagem compartilhada. A assinatura em excesso simplesmente não permitirá recursos suficientes para o Magento funcionar como deveria.

creuzerm
fonte
6

Estou mais envolvido na otimização de servidores gerenciados da minha empresa, mas talvez eu tenha algumas dicas para você. Primeiro, você pode examinar o código mais de perto usando o recurso de rastreamento de código do servidor Zend. Isso permitirá que você veja onde e quando as coisas ficam sujas.

Compartilho totalmente a consideração de benlumley em relação ao cache. A maioria dos sites que hospedamos nem tem o bloqueio de cache ativado. Esse cache deve ser chamado explicitamente e não "assumido". Portanto, se o seu código ainda não participou desse mecanismo, é algo que você definitivamente deseja tentar. Se você possui uma versão EE, pode obter a página inteira para obter o melhor da besta.

Um proxy reverso também ajudará bastante. Ele armazenará em cache os recursos estáticos, diminuindo significativamente a pressão na pilha de interpretação php dos seus servidores frontais.

Não se esqueça de gravar as sessões e o cache do Magento em um disco RAM. Isso definitivamente o levará a outro nível de performances.

Ainda há muito a ser dito aqui, mas estou ficando sem tempo. Você precisa saber que um bom site, bem codificado na versão 1.4.1 CE, rodando em um servidor 2x5650 Xeon + 16 GB RAM e tendo um Rproxy no topo, pode levar até 50.000 visitantes únicos por dia, com páginas fáceis para todos .

kameo
fonte
5

Mudar do Apache para o LiteSpeed ​​nos ajudou muito. Além de: Editar as configurações do MySQL, instalar o Fooman Speedster (módulo para compactar / combinar arquivos js e css) e instalar o APC. O Magento também publicou um white paper sobre como obter o melhor desempenho da edição corporativa, mas é igualmente aplicável às outras versões: http://www.magentocommerce.com/whitepaper/

Jonathan
fonte
4

Há muitas razões pelas quais o seu carrinho de compras Magento pode estar lento, mas não há desculpas, pois há várias maneiras de elevar o problema e torná-lo muito rápido. A ativação do Gzip modificando seu arquivo htaccess é um começo. Você também pode instalar a extensão fooman speedster. O tipo de servidor usado também determinará a velocidade da sua loja. Mais dicas e uma explicação melhor aqui http://www.interactone.com/how-to-speed-up-magento/

Thomas
fonte
4

Quando eu instalei, eu tinha páginas que estavam demorando 30 segundos para carregar. Meu servidor não estava no limite de memória RAM ou processador, então não sabia o que fazer. Olhando para o painel de rede do firebug, ele carregava cerca de 100 arquivos por página e cada um deles demorou muito tempo para se conectar. Após instalar o fooman speedster e o gzip no htaccess, os tempos de carregamento foram reduzidos para 3 segundos, como se estivessem em outros carrinhos de compras no meu servidor.

Scott
fonte
3

O Magento é muito lento porque o design do banco de dados não é muito bom. O código é uma bagunça e muito difícil de atualizar e otimizar. Portanto, todas as otimizações são feitas via cache em vez de código.

Por outro lado. É uma loja virtual com muitas ferramentas. Portanto, se você precisar de uma loja virtual flexível, basta comprar um servidor muito poderoso e você ficará bem.

desenvolvedor
fonte
1
O design do banco de dados é realmente muito bom e flexível.
Preto
3

também se resume a funcionalidade versus desempenho.

O desempenho bruto é obtido usando nginx, php-fpm, memcached, apc e um servidor projetado adequado.

Funcionalidades como desempenho plesk e magento podem ser gerenciadas levando toda a infraestrutura em perspectiva ao projetar uma nuvem de desempenho magento.

ProContractors
fonte