No momento, estou enfrentando um carregamento lento de página, com o checkout sendo o mais lento de todos com :
- 28 pedidos
- 18,5 KB transferidos (restante em cache do disco ou da memória)
- Concluir: 15.24s (o carregador desaparece e o usuário pode fazer alguma coisa)
- DOMContentLoaded: 6.45s
- Carga: 10.28s
O carregamento do checkout / carrinho termina com:
- 29 pedidos
- 28,5 KB transferidos (restante em cache do disco ou da memória)
- Acabamento: 6.35s
- DOMContentLoaded: 1.9s
- Carga: 3.79s
enquanto um carrinho vazio possui:
- 22 pedidos
- 8,2 KB transferidos (restante em cache do disco ou da memória)
- Acabamento: 2.78s
- DOMContentLoaded: 1.22s
- Carga: 2.65s
Estou usando redis para armazenamento em cache e todos os caches estão ativos. Javascript é minificado, mesclado e empacotado, bem como css e html. O servidor está muito bem situado com 8 CPUs, 16 GB de RAM e um SSD. A carga etc. nunca é alta o suficiente para ser mencionada. Basicamente, o servidor está dormindo ...
Existem apenas ~ 80 produtos e uma loja. Não usamos a parte do conteúdo do Magento. Apenas as páginas de detalhes do produto, a caixa e a área do cliente (assim como o back-end) são atendidas pelo Magento. Existe um sistema CMS "na frente" do Magento que serve páginas em menos de um segundo total, incluindo mídia.
Vejo que o TTFB para o documento de checkout já tem 5,66s. Com o Magento Profiler habilitado, posso descobrir o que magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body
causa a maior parte desse tempo. Embora não esteja claro o que exatamente causa isso. Aqui o criador de perfil não pode ajudar muito (pelo menos eu).
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
Também habilitei o criador de perfil de banco de dados, mas nenhuma consulta leva mais de 1ms, embora haja quase 120 chamadas. Mas isso resulta em apenas 120ms.
Gerei um perfil xdebug localmente e posso ver que a maior parte do tempo é desperdiçada no carregamento automático. Mas não tenho certeza se isso é "normal". Eu só me pergunto por que file_exists é chamado com tanta frequência. Como eu estava com a impressão, tudo é pré-compilado e armazenado em cache. Eu uso composer dump-autoload -o --apcu
depois de compilar di. E é claro que o apc está instalado e funcionando.
No entanto, estou preso aqui por enquanto. Parece que não consigo entender por que o TTFB já tem 5 segundos. E mesmo que eu resolvesse que ainda há mais 10 segundos para explicar e corrigir. Meu palpite principal atualmente é que estas são algumas solicitações xhr no bloqueio em segundo plano. Ou seja. Vejo que os métodos de estimativa de envio só começam após um intervalo intensamente longo de cerca de 7 segundos a 13 segundos e demoram cerca de 647ms. Por que demora tanto para desencadear isso? Até que isso termine, a animação do carregador é exibida, fazendo a página parecer "travada".
Qualquer contribuição é muito bem-vinda! Espero uma carga de página de 2 a 4 segundos no máximo. como foi o que eu comecei.
Edit: Eu consertei o TTFB alto. Como disse, estou usando o Redis para fazer cache. Também para cache de sessão, mas leva a um bloqueio entre duas sessões concorrentes. Na verdade, é a solicitação de checkout e a solicitação de estimativa de envio, levando a um tempo limite de 5 segundos. Voltei as sessões para o modo de arquivo normal. Infelizmente, isso não corrigiu o longo tempo de carregamento! Meu melhor palpite atual é que algo faz com que os métodos de estimativa de envio esperem antes de serem chamados, resultando em um bloqueio da página. Além disso, tentei adiar todas as JS sem nenhuma alteração.
Edit2: Como @ peter-ocallaghan observa o problema com o carregamento do checkout tão lento (+10 segundos) é realmente apenas um problema específico do cromo com o console do desenvolvedor aberto. O check-out / carrinho não parece ser afetado.
Respostas:
Parece que meu principal problema é a simultaneidade da sessão acontecendo por qualquer motivo. Tentei usar o cache de sessão com o Redis, conforme proposto na documentação.
Mas como tenho o problema de bloqueio de sessão, acho que isso é levado em consideração:
Ou seja, sempre há um atraso de no máx. 5 segundos. Quando mudei para a sessão do memcached, ficou um pouco melhor porque a espera foi menor. O padrão é estas configurações:
Estes são os padrões de uma versão mais antiga do php-memcached. A versão mais recente propõe os seguintes padrões:
Depois de ler estes dois: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269
Eu tentei com:
no index.php do Magento e isso acelera novamente o processo. Agora, recebo uma carga do caixa em aproximadamente 4 segundos. O carrinho é um pouco mais lento com ~ 5 segundos por causa do carregamento de informações totais. (todos tentam primeiro sem cache do navegador)
Suponho que corrigir o problema de bloqueio de sessão aceleraria novamente os tempos de carregamento, pois, observando os perfis, ainda há uma espera
session_start()
de 300 a 800 ms para várias chamadas.fonte
Otimizações possíveis:
analisador
fonte
Usando Solar ou Memcache ou Varnish, você pode acelerar seu site magento.
fonte