Acelerar o sabão magento v1

10

Tenho várias perguntas para desenvolvedores experientes em magento:

  1. É possível melhorar a velocidade da API do sabão magento v1? Ao solicitar dados, custa rapidamente 1,5 segundos para o magento compilar informações simples, como endereço do cliente, etc.

    Solicitar vários nós de dados relevantes possíveis pode custar rapidamente cerca de 5 a 7 segundos.

    Agora, já estou fazendo essas solicitações por meio de solicitações AJAX, para que a interface da página seja carregada rapidamente, mas uma melhoria de velocidade seria boa.

  2. Ou seria melhor escrever meu próprio aplicativo para fornecer as informações relevantes diretamente do magento db? Não é tão complicado de um db e se eu fizer uma consulta direta, ele carrega dentro de um centésimo de segundo com os resultados ...

    A única consideração que tenho com essa opção é:

    1. E se o magento atualizar e alterar seu esquema de banco de dados?
    2. Ou a configuração do banco de dados do magento é relativamente segura / compatível com versões anteriores?

Alguém tem alguma experiência com isso e com suas histórias de sucesso ou fracasso? Preciso tomar uma decisão informada para saber como proceder.

Tschallacka
fonte
1
É provavelmente vinculado ao PHP, não MySQL, Nginx ou qualquer outra coisa . O mesmo que o resto da sua loja. Faça sua loja rápida e a API seguirá. No entanto, nunca será tão rápido - os métodos de fluxo de dados / API são lentos, independentemente, portanto as implementações personalizadas sempre terão um desempenho superior ao custo de capacidade de gerenciamento / tempo de implementação / capacidade de atualização.
Ben Lessani - Sonassi 4/13/13
3
nah, não é vinculado ao php ... é toda a configuração do magento que torna as coisas incrivelmente lentas. Demora mais para uma solicitação de API de sabão ser concluída do que para solicitar uma grande página de visualização de loja com vários itens e carrinho de compras. Algo está distorcido no design do magento.
Tschallacka 5/03

Respostas:

8

Eu encontrei esse problema exatamente extensivamente e resolvi isso trabalhando apenas com objetos Magento diretamente. Eu acho que há a preocupação de alterações de código e outras coisas que você descreve, mas grande parte do meu código está em scripts de uso único para carregar dados antigos, coisas assim, então foi uma preocupação menor. Trabalhar diretamente com os objetos Magento também teve o benefício de me fazer aprender os internos um pouco mais do que eu faria com a API SOAP também - curva de aprendizado mais íngreme, com certeza, mas me sinto um pouco mais informado sobre o que está acontecendo lá do que se eu tivesse preso apenas usando a API SOAP.

Outra opção que tentamos foi armazenar em cache os dados usando o Memcached (ou algo como o Redis também funcionaria), embora agora você precise se preocupar com a frequência com que atualizar o cache, de onde e coisas assim. Mas, ele atinge o objetivo de recuperar dados muito, muito mais rapidamente. Acho que se essa é uma boa opção dependerá exatamente do que você está tentando fazer.

Mike
fonte
Bem, se eu fizesse algo com o próprio Magento, não obteria muitos benefícios de velocidade, já que o Magento ainda precisa ser "inicializado" para lidar com a solicitação. Gosto da API de sabão porque "não muda", mas odeio o fato de ser tão inacreditável e lento responder às consultas mais simples. até o site principal que precisa lidar com muito mais solicitações é muito mais rápido.
Tschallacka 04/03
O que estou tentando fazer é vincular o magento ao nosso software de ERP, portanto, preciso acessar os dados mais recentes a qualquer momento.
Tschallacka
1
Talvez - no meu caso, eu estivesse escrevendo coisas que carregariam um pedido por ID de incremento e executariam alguma ação com base em seus dados. O carregamento de um pedido completo durou cerca de 1,5 segundos na API SOAP, ou uma fração minúscula de segundo no formato "objeto bruto". A escolha para mim era clara quando eu carregava centenas deles em uma única execução. Outra restrição também é que, ao fazê-lo no estilo "magento app", ele deve estar no mesmo servidor. No meu caso, não me importei com isso, mas vale a pena lembrar.
Mike
1
Como você carregou tudo no formato de objeto bruto?
Tschallacka 5/03
$order = Mage::getModel('sales/order')->load($order_id);, bascicamente. Há um trecho ou dois neste tópico do fórum que podem ilustrar mais: magentocommerce.com/boards/viewthread/18629
Mike
6

Acelerar a API SOAP será difícil. Você sempre pode instalar algum hardware extra (servidor MySQL mais rápido) ou executar a loja no NginX, o que, quando você faz alguns milissegundos, o NginX é melhor para lidar com grandes quantidades de solicitações HTTP. O cache não ajudaria muito, pois a resposta da maioria das chamadas será diferente a cada vez.

Construir sua própria API do zero usando os modelos Magento Core pode ser a solução mais rápida, pois você pode ajustar o código para melhorar o desempenho, carregando apenas exatamente o que você precisa. Da minha experiência usando as classes principais, não mudou muito entre as versões 1.5 e 1.7, digamos

Edit: Eu esqueci, uma pequena vitória rápida pode vir da ativação da compactação de saída gzip no arquivo htaccess ou php.ini ou se você quiser mover a API SOAP para outro servidor usando o mesmo banco de dados se o banco de dados MySQL não estiver o gargalo

Sander Mangel
fonte
1
o banco de dados mysql não é o gargalo da garrafa, o gargalo da garrafa é magento, inicializando todos os seus arquivos de configuração, carregando todas as porcarias, compilando uma API de sabão e, finalmente, lembre-se de que eu fiz uma solicitação, busquei esses dados, avalie-os, compile no formato solicitado, valide o formato e, em seguida, envie-o através da conexão de sabão .... Verifique, verifique, verifique, verifique se é bom ... mas é muito lento. Vai dar certo no começo, mas precisará acelerar em algum momento.
Tschallacka 5/03
O cache nativo do Magento deve ajudá-lo a combinar arquivos de configuração, e você pode usar o compilador para acelerar o código. Também um acelerador PHP ( en.wikipedia.org/wiki/PHP_accelerator ) aumentaria seu desempenho aqui. Mas, no seu caso, pode valer a pena procurar criar sua própria API que usa a API do Magento.
Sander Mangel