Skip to main content

Performance Magento – As Dicas

Vou tentar fazer aqui uma síntese das dicas e possibilidades de otimização e performance que você pode aplicar ao seu sistema Magento para ter um melhor aproveitamento da ferramenta.

Só para entedermos melhor os conceitos, a performance é melhorada quando otimizamos nossos recursos para que sejam melhor aproveitados. E otimizar um recurso não é criar nada novo, apenas usar o que já temos em mãos da melhor forma possível, ou seja, aplicando boas práticas de uso podemos otimizar esse ou qualquer sistema.

Primeiro ponto, que considero de alta importância, pois o Magento parte dele antes mesmo de ser instalado. É o local de instalação, ou seja, o servidor de hospedagem. Inclusive isso já foi tema aqui no blog em Performance Magento – Hospedagem.

Em geral as pessoas costumam começar com qualquer hospedagem barata que aceite Magento. Mas os planos básicos são muito limitados em recursos e flexibilidade. Um plano do tipo VPN VPS sempre vai ser melhor do que um compartilhado. Assim como um IP Dedicado sempre vai ser melhor que um VPS. E um plano de Cloud Computing dizem que é o futuro.

Então temos: Compartilhado -> VPS -> Dedicado -> Cloud.

Segundo ponto, tem relação direta ao primeiro sobre hospedagem. É o uso de um acelerador de cache PHP por parte do servidor. A Magento em seu site mesmo indica o uso de APC ou XCache como sistema de acelerador de cache.

Você provavelmente não vai encontrar nenhuma hospedagem compartilhada que ofereça esse recurso. Acredito que isso possa ser encontrado a partir de hospedagens do tipo VPN pra cima.

Terceiro ponto, configuração de memória do PHP e do MySQL. Seu servidor possui um arquivo chamado php.ini que contém diversas informações de execução das suas aplicações. Esse arquivo já vem pré-configurado pelo seu servidor, então se você tiver acesso a esse arquivo pode otimizar os valores de memória e tempo de execução. Para mais informações leia o manual do PHP (sessão core ini) em www.php.net.

Para o MySQL a mesma coisa, dê uma lida no manual do MySQL em dev.mysql.com.

Quarto ponto, compressão de saída gzip. Usado pela maioria dos navegadores modernos para acelerar a renderização de páginas. Você precisa configurar no seu servidor para que ele gere saídas de páginas comprimidas em gzip para que possam ser usadas pelos navegadores nesse processo. Outra vez vai depender da escolha de uma boa hospedagem para contar com este recurso.

Quinto ponto, agora sim entrando nas configurações do próprio Magento. Muitos aqui já devem saber que o Magento conta com um sistema de gerenciamento de cache interno, que deve ser desligado sempre que você estiver desenvolvendo ou alterando recursos visuais ou do sistema como já foi falado aqui no blog em Cache Quando e Por que!

Quando tiver sua loja pronta e funcionando, deixe o controle de cache interno ligado para otimizar os recursos do sistema.

Sexto ponto, o Magento também conta com recurso de indexação. Essa é uma forma de encontrar com maior segurança e agilidade as informações armazenadas pelo sistema. Procure manter sempre as informações indexadas no seu Gerenciador de Índices.

Sétimo ponto, habilite apenas o que vai usar. Em alguns pontos do sistema o Magento vem pré configurado de fábrica, como por exemplo no uso de moedas pelo sistema. Se você vai usar apenas a moeda Real Brasileiro, não tem por que carregar centenas de moedas na inicialização da variável moedas.

Pode parecer apenas um detalhe irrelevante o carregamento de uma variável do sistema. Mas como eu disse no início, otimizar é isso, saber fazer bom proveito dos recursos. Se você juntar pequenos detalhes, no final terá a soma de um resultado bem mais satisfatório.

Veja o exemplo das moedas no post Cotação Dólar x Real. Navegue pelas configurações do sistema a procura de outros valores que não precisam ser carregados.

Oitavo ponto, seguindo a mesma idéia das variáveis acima, podemos fazer o mesmo para os módulos do sistema. O Magento é composto por uma série de módulos, é módulo de cálculo de frete, módulo de pagamentos, módulo de envio de email, módulo de produtos, de categorias, de estoque, de promoções, de tags, etc, etc, etc.

E por padrão todos os módulos são inicializados, mesmo que você não utilize, ele está lá, carregado, esperando pra ser usado.

Mas se você não vai usar, ou não precisa usar, desligue. Se você não vai usar os recursos de enquete no seu site, desligue o módulo de Polls do sistema. Também já falamos sobre isso aqui no blog em Desligar Notificações da Administração.

Nono ponto, entenda os conceitos e padrões de desenvolvimento para saber qual deles você deve usar na sua loja. Estou me referindo as tabelas do tipo EAV e Flat que manipulam os dados de maneiras diferentes na sua loja, prefira o modelo Flat. Para entender melhor leia o post Performance Magento – Produtos e Categorias.

Décimo ponto, novos templates e módulos. É muito comum o pessoal sair atrás de templates “irados”, com visual mais clean ou sofisticado. Importante lembrar que, um bom designer talvez não seja um bom programador visual. Talvez ele não saiba utilizar bem os recursos do Magento e acabe fazendo da maneira que ele entende, ou seja, o suficiente para aplicar o design dele ao sistema.

Sim, uma boa “tradução” da arte para o código faz diferença. O uso de técnicas SEO, tableless, xHtml, scripts bem escritos. Isso tudo pesa na balança. Da mesma forma como os módulos personalizados, vejo “barbaridades” sendo feitas por aí, com o único objetivo de funcionar. O simples fato de escrever um módulo que utilize recursos da sessão ao invés de solicitar uma nova instância do objeto, pode fazer diferença, principalmente se for um módulo muito utilizado pelo sistema.

No blog você encontra algumas referências sobre como trabalhar com temas ou usar recursos da sessão.

Décimo Primeiro ponto. Esse é meu favorito, o efeito placebo! Dê a seus clientes algo diferente, que pareça bom, e eles vão acreditar que faz efeito. Um exemplo disso é o uso de Ajax no código, como por exemplo carregar os valores do frete na tela sem precisar atualizar a página após digitar os valores no campo CEP.

Mesmo que leve o mesmo tempo de recarregar a página, a impressão do cliente será melhor, pois o efeito visual passa essa sensação. Da mesma forma que a usabilidade do seu site, quanto mais fácil for para o cliente achar o que procura, mais rápido o site vai parecer funcionar para ele.

Então a facilidade com que ele encontra as informações, os botões, os produtos bem dispostos na tela, banners bem feitos, fontes, cores, etc. Tudo isso influência na experiência do usuário, e com certeza ajuda na otimização, mesmo que seja apenas na sensação.

Décimo Segundo ponto. Otimizar o sistema de busca da sua loja, esse assunto já foi abordado aqui no blog em Otimize sua busca usando sinônimos. Além de ser uma boa prática SEO, quanto mais fácil for para seu cliente encontrar o que procura, mais rápido ele concretiza a venda. O Magento também permite que você configure o funcionamento da busca, alterando o número de palavras no critério de busca, o tipo de combinação das palavras digitadas, tamanho máximo, etc.

Além do que, você ainda pode configurar alguns atributos dos produtos para que sejam facilmente filtráveis por um menu navegável que fica ao lado do catálogo. Esse recurso é importantíssimo para facilitar a busca de seus clientes quando você possui um catálogo com muitas opções de produtos. E claro, pequenos detalhes como a opção de organizar a lista de resultados por nome ou preço.

Décimo Terceiro ponto. Os agendamentos cron, as rotinas de atualização a qual o sistema foi configurado. É provável que você tenha algumas rotinas pré agendadas no seu sistema, como o envio automático de emails, a cotação de moedas, publicação de feeds, controle de logs, geração de backups, sitemaps, etc.

Todas essas atividades vão utilizar recursos do sistema e do servidor para serem executadas. Então evite executar as ações em horários de pico ou grande movimento no site, pois isso gera concorrência de recursos e pode apresentar lentidão em diversos momentos, dependendo da tarefa que está sendo executada e do número de visitantes do seu site.

Se você não sabe qual o melhor horário para agendar suas rotinas, procura analisar as estatísticas do seu site com o Google Analytics, e veja quais os melhores horários para as tarefas.

Chega! Acho que abordamos diversos assuntos relevantes, mesmo que sendo de forma resumida, podemos ver que não caberia explorar tudo em apenas um post. Se você tiver outras dicas, me deixe saber, compartilhe seus conhecimentos.

Se você usa um servidor em nuvens (cloud computing) veja as dicas (em inglês) para otimizar sua aplicação em servidores cloud no site da optaros.

Sucesso!

Criando Extensão no Magento Connect

Como a maioria deve saber o Magento é uma ferramenta de código fonte aberta (open-source), e isso possibilita que desenvolvedores criem extensões para o sistema. Seja para melhorar algum recurso nativo ou para disponibilizar novas funcionalidades.

Por conta disso a Varien (empresa que criou o Magento) disponibilizou uma área online para organizar e disponibilizar estes recursos, chamado de Magento Connect. Então se você criou uma extensão e deseja disponibilizar a toda comunidade, seja na forma gratuita ou paga, você pode fazê-lo de duas maneiras.

A forma mais completa seria pelo backend da sua loja, em Sistema -> Magento Connect -> Criar Extensão. Diversas opções de configuração estarão disponíveis nesse quadro.

Outra forma seria pelo próprio site do Magento usando sua conta de membro, no alto da página ao fazer o login seu nome de usuário apresenta um menu com a opção “My Account“.

Ao clicar ali você terá um menu de opções, dentre eles a opção Magento Connect -> Add new extension e Manage extensions caso você já tenha enviado alguma extensão.

criar ou gerenciar extensões

Primeiro passo é informar o tipo de extensão que você deseja enviar, se será comunitária (grátis) ou paga. Você pode futuramente converter sua extensão free para paga editando as informações de extensão.

informações de extensão

Informe um título que identifique sua extensão, o nome será sugerido com base no título que você informou. Lembrando que a palavra-chave “Magento” não poderá ser usada.

configurando extensão

Dando continuidade as informações da sua extensão, informe o tipo de licença, a compatibilidade de versões, as palavras-chaves que identificam sua extensão, a que categoria pertence e em que idioma ela estará disponível.

E por fim, anexe o pacote zipado para upload dos arquivos.

salvando extensão

No final da página você ainda pode ter um preview de como será exibida a sua extensão depois de aprovada. Clique em salvar e aguarde a aprovação da equipe do Magento.

Dica: Ao salvar, o Magento gera um arquivo xml com informações da sua extensão, caso falte alguma informação ou se verifique alguma inconsistência e/ou incompatibilidade, um erro de package.xml será exibido.

Esse assunto não se resume nesse post, ainda há muito a ser falado sobre a criação de extensões para Magento.

Sucesso!

Pesquisa de Satisfação com eBit

Você provavelmente já ouviu falar na empresa e-Bit que atualmente faz parte do grupo Buscapé! Esse post não é uma propaganda da empresa, por isso não irei falar muito sobre a empresa e suas vantagens.

Mas se você é daquelas pessoas que gostam de pesquisas de satisfação, a eBit oferece esse recurso a seus clientes, além de você colocar no seu site um selo eBit que pode mudar dependendo das avaliações dos clientes, que por consequência pode atrair mais visitantes e gerar maior confiança no site.

Então, se você ainda não possui uma conta, acesse o link www.ebit.com.br/convenio_lojas/html/convenio_lojas.asp e faça o cadastro da sua empresa e espere aprovação.

Depois de aprovado você pode usar os selos disponíveis no site da eBit na sua loja.

Na página de pedido realizado com sucesso, você pode adicionar o bloco de código fornecido pelo eBit para que seus clientes iniciem a pesquisa de satisfação, para isso abra o arquivo success.phtml que fica em app -> design -> frontend -> base -> default -> template -> checkout e insira o código como no exemplo abaixo:

De preferência logo abaixo da mensagem de sucesso. O valor XXXXXX é o código da sua loja informado pela e-bit.

pesquisa satisfação ebit

Outra forma de incentivar seus clientes a responder as pesquisas é inserindo o código também nos emails de transação, como por exemplo o email de pedido realizado com sucesso. Leia mais sobre emails de transação aqui no blog.

Dica: Se você usa o Pagamento Digital da empresa Buscapé! como forma de pagamento, então pode integrar o e-Bit com seu ckeckout nas configurações do Pagamento Digital -> Ferramentas -> eBit e inserir seu código de associado.

Sucesso!

Status de Pedido Personalizado

Uma ação que achei interessante depois de ver algumas pessoas procurando, é a opção de alterar o status do pedido para um valor personalizado. Isso é interessante se você deseja ter um controle maior dos processos ou até se você possui ações personalizadas.

No caso você poderia querer alterar o status do seu pedido para “Em Desenvolvimento“, ou “Aguardando Estoque“, “Em Trânsito“, “Em Produção“, “Aguardando Retirada“, enfim, inúmeras as possibilidades de status. Vejamos então como ativar este recurso na sua loja.

Atenção: Os procedimentos abaixo envolvem programação e alteração de arquivos do Core do sistema. Faça backup dos arquivos antes de executar qualquer alteração, e faça as alterações em um ambiente de testes antes de aplicar na loja em produção.

Neste exemplo iremos alterar 4 arquivos. Os testes foram feitos na versão 1.4.0.1 do Magento, podendo haver pequenas diferenças em outras versões.

Para começar vamos alterar o arquivo Grid.php que fica em app -> code -> core -> Mage -> Adminhtml -> Block -> Sales -> Order, responsável por carregar as opções de status na tela de Pedidos.

Dentro da função _prepareMassaction() lá pela linha 215 você deve ver um código comentado com //. Apenas retire as barras:

[php]$statuses = Mage::getSingleton(‘sales/order_config’)->getStatuses();
array_unshift($statuses, array(‘value’=>”, ‘label’=>”));
$this->getMassactionBlock()->addItem(‘change_status’, array(
‘label’=> Mage::helper(‘sales’)->__(‘Change Status’),
‘url’ => $this->getUrl(‘*/*/massStatus’),
‘additional’ => array(
‘visibility’ => array(
‘name’ => ‘status’,
‘type’ => ‘select’,
‘class’ => ‘required-entry’,
‘label’ => Mage::helper(‘sales’)->__(‘New Status’),
‘values’ => $statuses
)
)
));[/php]

Veja que no código acima ele carrega os status do arquivo config: Mage::getSingleton(‘sales/order_config’)->getStatuses();

Então vamos abrir este arquivo config.xml que fica em app -> code -> core -> Mage -> Sales -> etc, para inserirmos os status personalizados. Lá pela linha 544 você deve encontrar as tags <order><statuses> e dentro deste bloco todos os status personalizados disponíveis.

Incluiremos aqui a linha <transito translate=”label”><label>Em Transito</label></transito> ficando o bloco assim:

[xml]





[/xml]Inclua quantos status desejar, sempre cuidando para que sua tag tenha um valor único. Logo abaixo temos a tag <states> com os blocos identificados acima. Vamos inserir nosso bloco personalizado aqui também (logo abaixo de holded como no bloco anterior).

[xml]

[/xml]Lembra do código que descomentamos agora a pouco? Eu realmente espero que você lembre, senão você está com algum problema. :D

Depois de carregar a lista de status, ele chama uma função $this->getMassactionBlock() que fica no arquivo OrderController.php em app -> code -> core -> Mage -> Adminhtml -> controllers -> Sale. Procure pela função que deve estar lá pela linha 395.

Para nossa surpresa o método está em branco, ou seja, ele não faz nada. Será que a equipe do Magento esqueceu de descomentar aquele código e criar as rotinas? Nunca saberemos. hehe. Bom, então vamos colocar nosso próprio código ali dentro, ficando assim:

[php]public function massStatusAction() {
$pedidosIds = $this->getRequest()->getPost(‘order_ids’, array());
$i=0;

foreach ( $pedidosIds as $pedidoId ) {
$order = Mage::getModel(‘sales/order’)->load( $pedidoId );
$order->setNovoStatus( $this->getRequest()->getPost(‘status’) )->save();
$i++;
}

if ( $i>0 ) {
$this->_getSession()->addSuccess( $this->__( ‘%s pedidos(s) com status atualizado(s)’, $i ) );
} else {
$this->_getSession()->addError( $this->__( ‘Nenhum status de pedido foi atualizado’ ) );
}

$this->_redirect(‘*/*/’);
}[/php]

Veja que para cada pedido selecionado eu chamo uma função setNovoStatus passando o valor selecionado na tela por você. Para que isso funcione precisamos criar esse método no arquivo Order.php que fica em app -> code -> core -> Mage -> Sales -> Model, lá pela linha 1157 você deve encontrar um comentário como este:

[php]/*********************** STATUSES ***************************/[/php]

Abaixo dele adicione o seguinte código:

[php]/**
* Altera o status do pedido
*
* @param string $valor
* @return Mage_Sales_Model_Order
*/
public function setNovoStatus( $valor=” ) {
$this->setState( $valor, true );

return $this;
}[/php]

E está pronto! Agora vamos aos testes. No seu backend vá em Vendas -> Pedidos para listar todos seus pedidos. Em seguida selecione os pedidos que deseja alterar o status e na combobox Ações selecione a opção Alterar Status. Uma nova combobox deve aparecer com as opções disponíveis, selecione o status e clique em Executar.

novos status

Os pedidos terão seus status alterados, e você poderá usar o filtro para visualizar apenas os status relacionados.

Sucesso!