Acelera el jabón magento v1

10

Tengo varias preguntas para desarrolladores experimentados de magento:

  1. ¿Es posible mejorar la velocidad de la api de jabón magento v1? Al solicitar datos, magento tarda rápidamente 1,5 segundos en recopilar información simple como la dirección del cliente, etc.

    Solicitar múltiples posibles nodos de datos relevantes puede costar rápidamente unos 5-7 segundos.

    Ahora ya estoy haciendo esas solicitudes a través de solicitudes AJAX para que la interfaz de la página se cargue rápidamente, pero una mejora de la velocidad sería buena.

  2. ¿O sería mejor escribir mi propia aplicación para darme la información relevante directamente desde el magento db? No es tan complicado de un db y si hago una consulta directa, se carga en una centésima de segundo con los resultados ...

    La única consideración que tengo con esa opción es:

    1. ¿Qué pasa si magento actualiza y cambia su esquema de base de datos?
    2. ¿O la configuración de la base de datos de magento es relativamente segura o compatible con versiones anteriores?

¿Alguien tiene alguna experiencia con esto y sus historias de éxito o fracaso? Necesito tomar una decisión informada para poder saber cómo proceder.

Tschallacka
fuente
1
Es probable que esté vinculado a PHP, no MySQL, Nginx o cualquier otra cosa . Lo mismo que el resto de tu tienda. Haga que su tienda sea rápida y la API lo seguirá. Sin embargo, nunca será más rápido: los métodos de flujo de datos / API son lentos independientemente, por lo que las implementaciones personalizadas siempre tendrán un mejor rendimiento a costa de la capacidad de administración / tiempo de implementación / actualización.
Ben Lessani - Sonassi
3
nah, no está vinculado a php ... es toda la configuración de magento que está ralentizando las cosas increíblemente. Se tarda más en completar una solicitud de API de jabón que en solicitar una página de vista de tienda grande con varios artículos y carrito de compras. Algo está torcido en el diseño de magento.
Tschallacka

Respuestas:

8

Me he encontrado con este problema de manera exhaustiva y lo he solucionado simplemente trabajando directamente con objetos de Magento. Creo que existe la preocupación de los cambios de código y otras cosas que usted describe, pero gran parte de mi código está en scripts de un solo uso para cargar datos antiguos, cosas así, por lo que fue una preocupación menor. Trabajar con los objetos de Magento directamente también tuvo el beneficio adicional de hacerme aprender un poco más de lo interno de lo que lo haría con solo la API SOAP, una curva de aprendizaje más pronunciada, sin duda, pero me siento un poco más informado sobre lo que está sucediendo. allí que si me hubiera quedado solo usando la API SOAP.

Otra opción que probamos fue almacenar en caché los datos usando Memcached (o algo así como Redis también funcionaría), aunque ahora debe preocuparse por la frecuencia con la que se actualiza el caché, desde dónde y cosas así. Pero, logra el objetivo de recuperar datos mucho, mucho más rápido. Creo que si esta es una buena opción dependerá exactamente de lo que intente hacer.

Miguel
fuente
Bueno, si tuviera que hacer algo con el propio magento, no obtendría muchos beneficios de velocidad, ya que todavía tiene que "arrancar" para manejar la solicitud. Me gusta la API de jabón porque "no cambia", pero odio el hecho de que es tan insoportable que responde lentamente a las preguntas más simples. Incluso el sitio principal que tiene que manejar muchas más solicitudes es mucho más rápido.
Tschallacka
Lo que estoy tratando de hacer es vincular magento a nuestro software ERP, por lo que necesito acceso a los datos más recientes en cualquier momento.
Tschallacka
1
Tal vez, en mi caso, estaba escribiendo cosas que cargarían un pedido por incremento de id, luego realizarían alguna acción basada en sus datos. La carga de un pedido completo fue de aproximadamente 1,5 segundos en la API SOAP, o una pequeña fracción de segundo en forma de "objeto sin procesar". La elección para mí fue clara cuando cargaría cientos de ellos en una sola ejecución. Otra restricción, también, es que al hacerlo al estilo de "aplicación magento" tiene que estar en el mismo servidor. En mi caso, no me importó eso en absoluto, pero vale la pena recordarlo.
Mike
1
¿Cómo cargó todo en forma de objeto sin procesar?
Tschallacka
$order = Mage::getModel('sales/order')->load($order_id);Básicamente. Hay un fragmento o dos en este hilo del foro que podrían ilustrar más: magentocommerce.com/boards/viewthread/18629
Mike
6

Acelerar la API de SOAP será difícil. Siempre puede agregar un poco de hardware adicional (servidor MySQL más rápido) o ejecutar la tienda en NginX, que cuando tenga algunos milisegundos, NginX es mejor para manejar grandes cantidades de solicitudes http. El almacenamiento en caché realmente no ayudaría mucho ya que la respuesta de la mayoría de las llamadas diferirá cada vez.

Construir su propia API desde cero utilizando los modelos Magento Core podría ser la solución más rápida porque puede modificar el código para mejorar el rendimiento cargando exactamente lo que necesita. Desde mi experiencia usando las clases principales, no ha cambiado mucho entre la versión 1.5 y 1.7

Editar: se me olvidó, una pequeña ganancia rápida podría venir al activar la compresión de salida gzip en el archivo htaccess o php.ini o si lo desea, mueva la API SOAP a otro servidor usando la misma base de datos si la base de datos MySQL no está el cuello de botella

Sander Mangel
fuente
1
la base de datos mysql no es el cuello de la botella, el cuello de la botella es magento arrancando todos sus archivos de configuración, cargando cada pedazo de basura, compilando una API de jabón y luego finalmente recuerda que hice una solicitud, obtener esos datos, evaluarlos, compilar en el formato solicitado, validar el formato y luego enviarlo a través de la conexión de jabón ... Verificar comprobar verificar verificar dos veces es bueno ... pero es demasiado lento. Al principio funcionará bien, pero necesitará acelerar en algún momento.
Tschallacka
El caché nativo de Magento debería ayudarlo a combinar archivos de configuración, y puede usar el compilador para acelerar el código. También un acelerador PHP ( en.wikipedia.org/wiki/PHP_accelerator ) aumentaría su rendimiento aquí. Pero en su caso, podría valer la pena buscar la construcción de su propia API que use la API principal de Magento.
Sander Mangel