Problemas comunes de codificación con la plataforma Magento por Deepa Ranganathan

Si usted ha estado en desarrollo tienda después de tienda en Magento, se habrían dado cuenta de ciertas cuestiones de codificación. Probablemente, usted ha pasado por algunas de estas cuestiones a sí mismo después de notar una inmersión en el desempeño de su tienda. Como se ha mencionado, hay varios problemas de codificación que afectan el rendimiento de su tienda. Pero, estos cinco, que se mencionan aquí, son generalmente responsables de 84% de los problemas de rendimiento relacionados que afectan a su tienda. Vamos a hablar de cómo afectan a la tienda, y cómo se pueden optimizar

Codificación dentro de un bucle


Te darás cuenta de que se amplía hasta el más mínimo error que se produce dentro de un bucle. En general, los bucles son los mayores errores de rendimiento, sobre todo los que reiteran consultas SQL o cálculos redundantes

Vamos a ver cómo las ineficiencias de los cálculos redundantes y consultas SQL dentro de un bucle pueden afectar el rendimiento de su tienda Magento

Cálculos dentro de un bucle

Si desea calcular el tamaño de una matriz mediante un bucle, la función que usted puede utilizar es count ()

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

{

//algún código

}

Count (), lleva a cabo de forma individual y calcula rápida; se ralentiza sólo cuando utiliza dentro de un bucle. Al iniciar el cálculo del tamaño de una matriz con una gran cantidad de datos y el uso de la cuenta para entregar la salida, se encuentra el rendimiento ralentizar enormemente. La razón es PHP no ofrece código de movimiento en lazo invariante automáticamente.

La mejor manera de evitar este problema de rendimiento es llamar a la función fuera del bucle

$ rownum = count ($ filas);

for ($ i = 0; $ i

​​{

//algún código

}

Las consultas SQL dentro de un bucle


Como está calculando una consulta SQL puede conducir a problemas basados ​​en el desempeño;. cuando se ejecuta dentro de un bucle, existe la posibilidad de reducir la velocidad de su sitio web mayoría de las veces, usted verá que los modelos de Magento son cargados en bucles

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

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

$this->processProduct($product);

}

An matriz de ID de producto se carga con el fin de procesar el modelo. Como puede verse EAV se utiliza para llevar a cabo este bucle que podría requerir que ejecutar varias consultas. En este caso, el número de consultas que se están ejecutando se multiplicará con el número de productos, y el resultado es una tienda lenta que da hacia fuera los malos resultados

.

La mejor forma de optimizar sería evitar carga de los productos en un bucle. Así que, ¿qué puedes hacer? Utilice datos de Magento . colección que carga un conjunto de productos fácilmente que sigue es un ejemplo de cómo los modelos de recogida de datos recogen los productos mediante la creación de una gran variedad de los diferentes productos Ids y mantener la adición de los productos solicitados a sus campos

$ colección = Mago: : getResourceModel ('Catálogo /product_collection')

-getProductIds ()))

-

foreach ($ colección como $ producto)

{

$ this-

}

Cuando se mueve fuera de los bucles y en el método de recolección de modelo, se verá que el rendimiento de la tienda de hecho ha mejorado. Recuerde siempre mantener un control sobre la memoria, de modo que cuando se utilizan modelos de recogida de datos, no cargue los datos que son más pesados ​​en comparación con el tamaño de la memoria. Usted debe realizar el ahorro de masas y eliminación de las consultas dentro de los modelos con el fin de mantener el rendimiento de su tienda.

Cargando Modelos

Todo el proceso de carga de un modelo en su tienda no es realmente caché, por lo que cada vez que se llama a la función load (), determinadas consultas se ejecutan dentro de la base de datos, lo que causa problemas de rendimiento en su tienda

$ name = Mago :: getModel ('Catálogo /producto) -

$ sku = Mago :: getModel ('Catálogo /producto ") -

$ attr = Mago :: getModel (' Catálogo /producto") -

Este es un ejemplo clásico de cómo se ejecutan consultas en la base de datos cada vez que un modelo en particular se llama

La mejor manera de abordar este problema es asegurar que cada modelo se carga una sola vez

$ producto = Mago :: getModel ('Catálogo /producto ") -

$ nombre = $ producto-

$ sku = $ producto-

$ attr = $ producto-

A veces, sólo se ocupa de la identificación del producto. En ese momento, no tiene sentido para cargar todo el modelo. Con este código se pueden cargar fácilmente el producto Id para un determinado producto

$ producto = Mago :: getModel ('Catálogo /producto ") -

$ res [' id '] = $ producto-

Otro método popular para obtener el ID del producto es utilizar el método del producto nativo getIdBySku ()

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

Codificación Colecciones

La otra área en Magento codificación que ofrece temas es colecciones. Las colecciones son bastante eficiente, pero a medida que trabajan con un conjunto de datos enorme, usted tendrá que asegurarse de que usted les está codificando con cuidado, de lo contrario se enfrentará a problemas de rendimiento

Vamos a ver cómo las colecciones pueden causar problemas de codificación

Llamadas redundante de datos Establece

Por lo general, utiliza las colecciones para recuperar un solo elemento en especial el primer punto de la primera iteración del bucle. Por lo tanto, lo que podría ser un problema aquí? Cuando usted no ofrece una limitación en los resultados, el bucle mantendrá iteración y dar a conocer todos los elementos dentro de la colección en el resultado, en lugar de la primera elemento original. El siguiente es un ejemplo de cómo las colecciones pueden dar a conocer todos los elementos

Función pública getRandomItem ()

{

$ colección = Mago :: getResourceModel ('mimodulo /my_collection ') - > setRandomOrder ();

retorno $ collection- > getFirstItem ();

}

La aplicación de la limitación

Función pública getRandomItem ()

{

$ colección = Mago :: getResourceModel ('mimodulo /my_collection')

-

devolver $ collection-

} México La funciones $ collection- > setPageSize () y $ collection- > setCurPage oferta () limitar el número de elementos que se recupera de la colección

Usted puede incluso modificar $ collection-


Biografía del autor:

Deepa, un escritor técnico con semáforo Software, que ahora dedica su tiempo en el asesoramiento a sus clientes a contratar a los desarrolladores de Magento. Ella ofrece información, así como consejos y noticias de moda en este dominio. Su amor por la lectura le ayuda constantemente proporcionar la información más reciente sobre los diferentes aspectos técnicos y de diseño de Magento