Problemas comuns de codificação com Magento Plataforma de Deepa Ranganathan

Se você tem sido em desenvolvimento loja depois loja em Magento, você teria notado certas questões de codificação. Provavelmente, você já passaram por algumas destas questões a si mesmo depois de perceber um mergulho no desempenho de sua loja. Como mencionado, existem vários problemas de codificação que afetam o desempenho de sua loja. Mas, estes cinco, que são mencionados aqui, são tipicamente responsáveis ​​por 84% das questões relacionadas com o desempenho que afetam sua loja. Vamos falar sobre como eles afetam a loja, e como eles podem ser otimizados

Codificação dentro de um loop

Você vai perceber que mesmo o menor erro que ocorre dentro de um loop é ampliada. Geralmente, laços são os maiores erros de desempenho, especialmente os que reiteram consultas SQL ou cálculos redundantes

Vamos ver como as ineficiências de cálculos redundantes e consultas SQL dentro de um loop pode afetar o desempenho de sua loja Magento

Computations dentro de um loop

Se você quiser calcular o tamanho de uma matriz usando um loop, a função que você pode usar é count ()

for ($ i = 0; i < $; count ($ linhas); $ i ++)

{

//algum código

}

Count (), realiza individualmente e calcula rápido; ele diminui apenas quando utilizados dentro de um loop. Quando você começar a calcular o tamanho de uma matriz com uma grande quantidade de dados e usar contagem de entregar a saída, você vai encontrar o desempenho abrandar imensamente. A razão é PHP não oferecer loop-invariante código movimento automaticamente.

A melhor maneira de evitar esse problema de desempenho é para chamar a função fora do loop

$ rowNum = count ($ linhas);

for ($ i = 0; i $

{

//algum código

}

consultas SQL dentro de um loop


Como ele está computando uma consulta SQL pode levar a problemas baseados no desempenho;. quando você executá-lo dentro de um loop, existe a possibilidade de abrandar o seu website maioria das vezes, você vai ver que os modelos Magento são carregados em loops

foreach ($ this- > getProductIds () como $ productId)

{$ product = Mage::getModel('catalog/product')->load($productId);

$this->processProduct($product);

}

An matriz de IDs de produtos é carregado a fim de processar o modelo. Como pode ser visto EAV é usado para realizar esse loop que pode exigir que você executar várias consultas. Neste caso, o número de consultas que estão sendo executadas serão multiplicados o número de produtos, eo resultado é uma loja lenta que dá para fora um desempenho ruim.

A melhor maneira de otimizar seria para evitar o carregamento dos produtos em um loop. Então, o que você pode fazer? Usar dados Magento . coleção que carrega um conjunto de produtos facilmente seguir é um exemplo de como os modelos de recolha de dados recolher os produtos através da criação de uma matriz do produto diferentes IDs e manter-se adicionar os produtos solicitados para seus campos

$ collection = Mago: : getResourceModel ('catálogo /product_collection')

-getProductIds ()))

-

foreach ($ coleta quanto $ produto)

{

$ this-

}

Quando você se move fora das alças e no método de recolha de modelo, você vai ver que o desempenho da loja tem de fato melhorado. Lembre-se sempre manter um controlo sobre a memória, de modo que quando se usa modelos de recolha de dados, você não carregar dados que é mais pesado em comparação com o tamanho da memória. Você deve executar a poupança em massa e exclusão das consultas no âmbito dos modelos de modo a manter o desempenho de sua loja.

Carregando Models

Todo o processo de carregamento de um modelo em sua loja não é realmente armazenada em cache, que é por isso que cada vez que você chamar a função load (), certas consultas são executadas no banco de dados, causando problemas de desempenho em sua loja

$ name = Mago :: getModel ('/Catálogo de produtos ») -

$ sku = Mago :: getModel ('/Catálogo de produtos ») -

$ attr = Mago :: getModel (' /Catálogo de produtos») -

Este é um exemplo clássico de como as consultas são executadas no banco de dados cada vez que um determinado modelo é chamado

A melhor maneira de abordar esta questão é garantir que cada modelo é carregado somente uma vez

$ product = Mago :: getModel ('/Catálogo de produtos ») -

$ name = $ produto-

$ sku = $ produto-

$ attr = $ produto-

Às vezes, você está apenas preocupado com a identificação do produto. Em tal momento, não faz sentido para carregar todo o modelo. Com este código você pode facilmente carregar o ID do produto para um determinado produto

$ product = Mago :: getModel ('/Catálogo de produtos ») -

$ res [' id '] = $ produto-

Outro método popular para derivar ID do produto é usar o método produto nativo getIdBySku ()

$ res ['id'] = Mago :: getModel ('/Catálogo de produtos ») -

Codificação Colecções

A outra área em Magento codificação que oferece questões é coleções. As coleções são bastante eficiente, mas como eles trabalham com um grande conjunto de dados, você vai precisar para assegurar que você está codificando-los com cuidado, senão você vai enfrentar problemas de desempenho

Vamos ver como as coleções podem causar problemas de codificação

Chamada de dados redundante Define

Você geralmente usar coleções para recuperar um único item especialmente o primeiro item na primeira iteração do loop. Então, o que poderia ser um problema aqui? Quando você não oferecer uma limitação para os resultados, o loop irá manter a iteração e dar todos os itens dentro da coleção no resultado, em vez de o primeiro item original. O seguinte é um exemplo de como as coleções podem dar todos os itens

função pública getRandomItem ()

{

$ collection = Mago :: getResourceModel ('mymodule /my_collection ') - > setRandomOrder ();

return $ Collection- > getFirstItem ();

}

A aplicação da limitação

função pública getRandomItem ()

{

$ collection = Mago :: getResourceModel ('mymodule /my_collection')

-

retornar $ Collection-

}

As funções $ Collection- > setPageSize () e US $ Collection- > setCurPage () oferta limitar o número de itens que estão sendo recuperados da coleção

Você pode até mesmo modificar $ Collection-


Sobre o autor:

Deepa, um escritor técnico com Semaphore Software, que agora dedica seu tempo em aconselhar os seus clientes a contratar desenvolvedores Magento. Ela oferece informações, bem como dicas e as últimas tendências neste domínio. Seu amor pela leitura ajuda a fornecer constantemente informações mais recentes sobre os diferentes aspectos técnicos e de design de Magento