¿Por qué es tan lento Magento? [cerrado]

138

¿Magento suele ser tan terriblemente lento?

Esta es mi primera experiencia con él y el panel de administración simplemente tarda años en cargar y guardar los cambios. Es una instalación predeterminada con los datos de prueba.

El servidor donde está alojado sirve a otros sitios que no son de Magento súper rápido. ¿Qué tiene el código PHP que usa Magento que lo hace tan lento y qué se puede hacer para solucionarlo?

señor-euro
fuente
12
¿En qué hardware lo estás ejecutando? Magento necesita un respaldo de hardware serio en mi experiencia.
jitter
3
No estoy pidiendo apoyo, sino código. Espero que alguien haya experimentado esto en el pasado y haya optimizado el código para evitar un comportamiento tan lento. No tengo un fragmento de código específico para señalar, ya que es aplicable en todo el sitio. Tendré que profundizar en el asunto.
mr-euro
18
Magento tiene más de 6000 archivos de clase y está diseñado para uso corporativo, no para uso doméstico. Sin APC, no pienses en instalarlo. No lo recomiendo para pequeñas tiendas.
Elzo Valugi
1
Con respecto a su bandera, @Jonesome: esta pregunta es muy amplia y ... probablemente algo anticuada en este momento. Dicho esto, ahora tenemos un sitio dedicado para problemas de Magento ( Magento ), que probablemente sea un buen recurso para cualquiera que trabaje para optimizar su configuración.
Shog9
1
@ Shog9 Administro un equipo que desarrolla y admite complementos para magento. Les puedo decir que este problema exacto surge casi a diario. Magento no es una aplicación de lámpara "normal", ya que consume muchos recursos. Este hilo es importante. Cerrarlo obliga a esta conversación común a abandonar SO, lo cual es desafortunado para todos.
Jonesome Reinstate a Monica el

Respuestas:

183

Solo participé tangencialmente en la optimización de Magento para el rendimiento, pero aquí hay algunas razones por las que el sistema es tan lento

  1. Partes de Magento usan un sistema de base de datos EAV implementado sobre MySQL. Esto significa consultar por una sola "cosa" a menudo significa consultar varias filas

  2. Hay muchas cosas detrás de escena (configuración de la aplicación, configuración del sistema, configuración del diseño, etc.) que implican construir árboles XML gigantes en la memoria y luego "consultar" esos mismos árboles para obtener información. Esto requiere memoria (almacenamiento de los árboles) y CPU (análisis de los árboles). Algunos de estos (especialmente el árbol de diseño) son enormes. Además, a menos que el almacenamiento en caché esté activado, estos árboles se crean a partir de archivos en el disco y en cada solicitud .

  3. Magento usa su sistema de configuración para permitirle anular clases. Esta es una característica poderosa, pero significa que cada vez que se crea una instancia de un modelo, ayuda o controlador, se deben ejecutar instrucciones PHP adicionales para determinar si se necesita un archivo de clase original o un archivo de clase de anulación. Esto se suma.

  4. Además del sistema de diseño, el sistema de plantillas de Magento implica una gran cantidad de renderizado recursivo. Esto se suma.

En general, los ingenieros de Magento tenían la tarea, en primer lugar, de construir el sistema más flexible y personalizable posible, y preocuparse por el rendimiento más adelante.

Lo primero que puede hacer para garantizar un mejor rendimiento es activar el almacenamiento en caché (Sistema -> Administración de caché). Esto aliviará parte del bloqueo de CPU / disco que ocurre mientras Magento está construyendo sus diversos árboles XML.

Lo segundo que querrá hacer es asegurarse de que su equipo anfitrión y de operaciones tenga experiencia en el ajuste de rendimiento de Magento. Si confía en el plan de $ 7 / mes para llevarlo a cabo, bueno, buena suerte con eso.

Alan Storm
fuente
10
Gracias por la extensa explicación. Magento es de hecho muy poderoso al tiempo que permite flexibilidad. Inicialmente pensé que era simplemente el estancamiento de las escrituras de la base de datos debido a un SQL mal escrito, pero ahora me doy cuenta de que hay mucho más detrás de escena que inicialmente se esperaba. Como nota: el almacenamiento en caché se deshabilitó debido a que el propietario de la tienda agregó productos. Cuando el caché estaba encendido, se quejaba de que los productos no aparecían obligándome a desactivar el almacenamiento en caché mientras se estaba configurando la tienda. Está alojado en un servidor dedicado, pero parece que tendré que mover Magento a su propia caja exclusiva.
Sr.-euro
44
Lo perfilé hace un tiempo con XHProf. El análisis XML tomó una gran cantidad de tiempo, creo que está en lo correcto con esta lista.
Morgan Tocker
1
Me preguntaba si ejecutar Magento en HHVM mejoraría esto. La última vez que verifiqué que HHVM no es compatible con Magento, pero si se hiciera, ¿eso ayudaría?
Bharadwaj Srigiriraju
1
Esto explica mucho. Saber es la mitad de la batalla. No veo cómo esto no podría considerarse constructivo.
flcoder
No olvide optimizar los archivos del cargador automático del compositor (consulte las pautas de rendimiento de magento), si usa el compositor y, para Magento2, ¡active el modo de producción! Varnish también es una muy buena idea, siempre que su aplicación no tenga problemas con el caché de página completa.
Dmitri Sologoubenko
54

Además de las recomendaciones de Alan Storm sobre el almacenamiento en caché, hay dos cosas que recomiendo específicamente que analice en relación con el almacenamiento en caché:

- Asegúrese de que el almacenamiento en caché esté en Memcached, en lugar de en el disco.

Cuido un par de instalaciones de magento, y una vez que obtienes cualquier tipo de carga en el sistema, memcached comienza a funcionar mucho más rápido. Y es muy fácil cambiarlo (¡en relación con hacer otras cosas de magento al menos!)

Un buen punto de partida está aquí: http://www.magentocommerce.com/boards/viewthread/12998/P30/ , pero si no ha usado memcached antes, vale la pena ver también información general al respecto.

- Habilitar el almacenamiento en caché de plantillas / vistas.

Este es un buen artículo: http://inchoo.net/ecommerce/magento/magento-block-caching/

También hay buenos en el sitio de magento (almacenamiento en caché de bloque de google magento), pero está inactivo en este momento.

Para agregar mis dos centavos al almacenamiento en caché de bloques, le aconsejo que cree sus propios bloques en / app / code / local, extienda los núcleos y defina los parámetros de caché, asígneles el nombre xxx_Cache y luego actualice su diseño para usar estos bloques. de los principales. De esta manera, evita perder sus cambios o romper el sistema cuando actualiza magento.

benlumley
fuente
3
Gracias por los puntos. Voy a echar un vistazo a memcached que no he usado en producción antes. Buena idea sobre clonar los bloques también.
Sr.-euro
3
Respaldo lo que dijo benlumbey, no uso memcached porque estoy ejecutando Windows Server, pero almaceno el directorio / var en una unidad de estado sólido y eso ha hecho una gran diferencia para mí.
Rick J
@rickj: sí, cualquier cosa para hacer que la carpeta ./var sea más rápida definitivamente ayuda, también he intentado usar tmpfs antes de memcached, y también obtuve un impulso decente.
benlumley el
Agregaría el uso de caché apc para un solo nodo, ya que parece tener menos sobrecarga que luego memcached para entornos de múltiples nodos.
sbditto85
2
Si verdad. Pero hay algunas advertencias allí, dependiendo de cómo ejecute PHP, puede terminar con un caché APC separado para cada proceso PHP, que se vuelve aún menos óptimo si está ciclando sus procesos PHP cada X solicitudes.
benlumley
23

Si aún no lo ha visto, Magento y Rackspace se unieron para crear un libro blanco sobre el ajuste de rendimiento de Magento. Es excelente. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-powered-by-rackspace-solutions/

--- editar ---

Otro gran recurso, recientemente disponible (octubre de 2011) es: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Gracias por Alan Storm en este caso).

Laizer
fuente
Gracias por la actualización, la leeré en profundidad más tarde.
mr-euro
2
Ese segundo enlace ahora está muerto.
Laizer
1
El primer enlace también está muerto.
Edward
Los enlaces están rotos. Ner
Ner
1
Enlace directo para el Whitepaper de Rackspace (enlace # 1).
Levi Figueira el
17

Posiblemente también haya una razón muy poco obvia por la cual su interfaz de administración es muy lenta. Magento tiene un módulo llamado Mage_AdminNotification. Intenta deshabilitar esa ext. Porque lo que hace es consultar a magentocommerce.com para obtener nuevos mensajes de actualización. Si sus servidores son lentos, su página de administrador espera y, en efecto, es lenta debido al retraso de la red y la carga de noticias externas. Si ha asegurado su conexión de servidor saliente a través de un firewall, esto puede ser aún más frustrante, ya que la interfaz de administración esperará el tiempo de espera cuando no pueda llegar a magentocommerce.com

Para deshabilitarlo: vaya a Sistema -> Configuración, desplácese hasta la parte inferior y presione Avanzado (en la sección Avanzado). Ahora deshabilitar Mage_AdminNotificationy guardar!

Sam Figueroa
fuente
44
Esto hizo una diferencia significativa en el rendimiento de mi entorno de desarrollo local, lo que siempre me había frustrado lo lento que se ejecutaba en un cuadro de desarrollo muy rápido. ¡Gracias!
random_user_name
En Magento2: Tiendas-> Configuración-> Avanzado-> Avanzado, luego deshabilítelo Mage_AdminNotification.
Scott C Wilson
6

Solo tengo una experiencia superficial con Magento. Lo instalé en un servidor de red compartido y la carga de la página fue pésima ~ 5 + segundos. En una alondra, lo instalé en mi servidor dedicado optimizado para sitios CMS, y me sentí muy, muy ágil.

Mi hosting dedicado tenía ~ 10 Joomla! sitios y un sitio VBullitin en ejecución.

Supongo que simplemente no funcionará en el alojamiento compartido. La suscripción excesiva simplemente no permitirá que Magento ejecute los recursos suficientes como debería.

creuzerm
fuente
6

Estoy más involucrado en la optimización del servidor administrado en mi empresa, pero puedo tener algunos consejos para usted. Primero, puede mirar el código más de cerca usando la función de rastreo de código del servidor Zend. Le permitirá ver dónde y cuándo se ensucian las cosas.

Comparto totalmente la consideración de benlumley con respecto al caché. La mayoría de los sitios que alojamos ni siquiera tienen habilitado el almacenamiento en caché de bloques. Este caché debe llamarse explícitamente y no "asumirse". Entonces, si su código aún no ha formado parte de este mecanismo, es algo que definitivamente desea probar. Si tiene una versión EE, puede obtener la página completa para obtener lo mejor de la bestia.

Un proxy inverso también ayudará mucho. Almacenará en caché los recursos estáticos, reduciendo significativamente la presión sobre la pila de interpretación de php de sus servidores frontales.

No olvides escribir las sesiones y el caché de Magento en un disco RAM. Esto definitivamente te llevará a otro nivel de actuaciones.

Todavía hay mucho que decir aquí, pero me estoy quedando sin tiempo. Debe saber que un buen sitio, bien codificado en una versión 1.4.1 CE, que se ejecuta en un servidor Xeon + 16 GB RAM de 2x5650 y que tiene un Rproxy en la parte superior puede recibir hasta 50 000 visitantes únicos al día con páginas suaves para todos .

kameo
fuente
5

Cambiar de Apache a LiteSpeed ​​nos ayudó mucho. Además de: Editar la configuración de MySQL, instalar Fooman Speedster (módulo para comprimir / combinar archivos js y css) e instalar APC. Magento también ha publicado un documento técnico sobre cómo obtener el mejor rendimiento de la edición empresarial, pero es igualmente aplicable a las otras versiones: http://www.magentocommerce.com/whitepaper/

Jonathan
fuente
4

Hay muchas razones por las cuales su carrito de compras de Magento podría estar funcionando lentamente, pero no hay excusas porque hay una variedad de formas de evitar el problema y hacerlo bastante rápido. Habilitar Gzip modificando su archivo htaccess es un comienzo. También puede instalar la extensión Fooman Speedster. El tipo de servidor utilizado también determinará la velocidad de su tienda. Más consejos y una mejor explicación aquí http://www.interactone.com/how-to-speed-up-magento/

Thomas
fuente
4

Cuando instalé por primera vez, tenía páginas que tardaban 30 segundos en cargar. Mi servidor no estaba lleno en RAM o procesador, así que no sabía qué hacer. Mirando el panel de red de firebug, cargaba unos 100 archivos por página, y cada uno tardó mucho en conectarse. Después de instalar Fooman Speedster y el gzip en el htaccess, los tiempos de carga se redujeron a 3 segundos, como si hubieran estado en otros carros de compras en mi servidor.

Scott
fuente
3

Magento es muy lento porque el diseño de la base de datos no es muy bueno. El código es un desastre y muy difícil de actualizar y optimizar. Por lo tanto, todas las optimizaciones se realizan mediante caché en lugar de código.

Por otra parte. Es una tienda web con muchas herramientas. Entonces, si necesita una tienda web flexible, simplemente compre un servidor muy potente y estará bien.

desarrollador
fuente
1
El diseño de la base de datos es realmente muy bueno y flexible.
Negro
3

También se reducirá a funcionalidad versus rendimiento.

Se obtiene un rendimiento sin procesar utilizando nginx, php-fpm, memcached, apc y un servidor diseñado adecuadamente.

La funcionalidad como el rendimiento de plesk y magento podría gestionarse teniendo en cuenta toda la infraestructura al diseñar una nube de rendimiento de magento.

ProContractors
fuente