Actualmente me enfrento a una carga lenta de la página, y el pago es el más lento de todos con :
- 28 solicitudes
- 18,5 KB transferidos (resto en caché del disco o memoria)
- Finalizar: 15.24s (el cargador desaparece y el usuario puede hacer algo)
- DOMContentLoaded: 6.45s
- Carga: 10.28s
La carga del pedido / carrito finaliza con:
- 29 solicitudes
- 28,5 KB transferidos (resto en caché del disco o memoria)
- Acabado: 6.35s
- DOMContentLoaded: 1.9s
- Carga: 3.79s
mientras que un carrito vacío tiene esto:
- 22 solicitudes
- 8.2 KB transferidos (resto en caché del disco o memoria)
- Acabado: 2.78s
- DOMContentLoaded: 1.22s
- Carga: 2,65 s
Estoy usando redis para el almacenamiento en caché y todos los cachés están activos. Javascript se minifica, combina y agrupa, así como CSS y HTML. El servidor está bastante bien situado con 8 CPU, 16 GB de RAM y un SSD. La carga, etc., nunca es lo suficientemente alta como para ser mencionada. Básicamente el servidor está durmiendo ...
Solo hay ~ 80 productos y una tienda. No utilizamos el contenido de Magento. Magento solo sirve páginas de detalles del producto, caja y área de clientes (así como backend). Hay un sistema CMS "en frente" de Magento que sirve páginas en menos de un segundo total, incluidos los medios.
Veo que TTFB para el documento de pago ya es 5.66s. Con el generador de perfiles de Magento habilitado, puedo encontrar que magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body
causa la mayor parte de ese tiempo. Aunque no está claro qué lo causa exactamente. Aquí el generador de perfiles no puede ayudar mucho (al menos yo).
magento->routers_match 5.347600 5.347600 1 42,063,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index 5.143997 5.143997 1 15,976,176 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body 5.143980 5.143980 1 15,975,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest 0.000609 0.000609 1 82.464 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest->OBSERVER:checkout_allow_guest 0.000592 0.000592 1 80.944 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT 0.106220 0.035407 3 13,085,544 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_load 0.000666 0.000666 1 136.56 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_xml 0.005658 0.005658 1 174.632 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks 0.099472 0.099472 1 12,755,648 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements 0.099462 0.099462 1 12,902,296 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.091426 0.091426 1 11,885,184 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->EVENT:core_layout_block_create_after 0.000169 0.000003 51 -16.128 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements 0.000609 0.000609 1 52.76 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.000455 0.000455 1 26.952 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after 0.000297 0.000297 1 16.32 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after->OBSERVER:persistent 0.000279 0.000279 1 14.776 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch 0.002972 0.002972 1 116.752 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch 0.002913 0.002913 1 110.192 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor 0.002900 0.002900 1 108.656 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags 0.001175 0.001175 1 77.784 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_varnish 0.000516 0.000516 1 35.056 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_builtin 0.000629 0.000629 1 41.08 0
También habilité el generador de perfiles de base de datos, pero ninguna consulta tarda más de 1 ms, aunque hay casi 120 llamadas. Pero eso suma solo 120 ms entonces.
Generé un perfil de xdebug localmente y puedo ver que la mayor parte del tiempo se pierde en la carga automática. Pero no estoy seguro si eso es "normal". Me pregunto por qué file_exists se llama con tanta frecuencia. Como tenía la impresión, todo está precompilado y almacenado en caché. Yo uso composer dump-autoload -o --apcu
después de compilar di. Y, por supuesto, apc está en funcionamiento.
Sin embargo, estoy atrapado aquí por ahora. Parece que no puedo entender por qué TTFB ya tiene 5 segundos. E incluso si resolviera que todavía hay 10 segundos más para explicar y solucionar. Mi suposición principal actualmente es que estas son algunas solicitudes xhr en el bloqueo de fondo. Es decir. Veo que los métodos de envío estimado solo comienzan después de una brecha intensamente larga de aproximadamente 7 segundos a 13 segundos y dura aproximadamente 647 ms. ¿Por qué espera tanto tiempo para activar eso? Hasta que finalice, se mostrará la animación del cargador haciendo que la página parezca "colgarse".
Cualquier entrada es muy bienvenida! Espero una carga de página de 2 a 4 segundos como máximo. ya que con eso empecé.
Editar: arreglé el alto TTFB. Como dije, estoy usando Redis para el almacenamiento en caché. También para el almacenamiento en caché de la sesión, pero conduce a un bloqueo entre dos sesiones concurrentes. En realidad, es la solicitud de pago y la solicitud de envío estimado que conduce a un tiempo de espera de 5 segundos. Cambié las sesiones al modo de archivo normal. Desafortunadamente, esto no solucionó el largo tiempo de carga. Mi mejor suposición actual es que algo hace que los métodos de envío estimados esperen antes de ser llamados, lo que resulta en un bloqueo de la página. Además, intenté diferir todos los JS sin ningún cambio.
Edit2: como @ peter-ocallaghan señala que el problema con la carga de la caja tan lenta (+10 segundos) es en realidad solo un problema específico de Chrome al abrir la consola de desarrollo. Pagar / carrito no parece verse afectado.
Respuestas:
Parece que mi principal problema es la concurrencia de sesión por cualquier razón. Traté de usar el almacenamiento en caché de sesión con Redis como se propone en la documentación.
Pero como tengo el problema de bloqueo de sesión, creo que esto se tiene en cuenta:
Lo que significa que siempre hay un retraso de máx. 5 segundos. Cuando cambié a la sesión memcached, mejoró un poco porque la espera fue menor. El valor predeterminado es esta configuración:
Estos son los valores predeterminados de algunas versiones anteriores de php-memcached. La versión más nueva propone estos valores predeterminados:
Después de leer estos dos: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269
Lo intenté con:
en index.php de Magento y esto nuevamente acelera el proceso. Ahora recibo una carga del pago en aproximadamente 4 segundos. El carrito es un poco más lento con ~ 5 segundos debido a la carga de información de totales. (todos primero intente sin almacenamiento en caché del navegador)
Supongo que solucionar el problema de bloqueo de la sesión volvería a acelerar los tiempos de carga ya que mirar los perfiles revela que todavía hay una espera
session_start()
de 300 a 800 ms para varias llamadas.fuente
Posibles optimizaciones:
Profiler
fuente
Al usar Solar o Memcache o Varnish, puede acelerar su sitio magento.
fuente