caricamento pagine lento


8

Attualmente sto affrontando un lento caricamento della pagina con il checkout il più lento di tutti con :

  • 28 richieste
  • 18,5 KB trasferiti (resto memorizzato nella cache dal disco o dalla memoria)
  • Fine: 15.24s (il caricatore scompare e l'utente può fare qualcosa)
  • DOMContentLoaded: 6.45s
  • Carico: 10.28s

Caricamento della cassa / carrello termina con:

  • 29 richieste
  • 28,5 KB trasferiti (resto memorizzato nella cache dal disco o dalla memoria)
  • Finitura: 6.35s
  • DOMContentLoaded: 1.9s
  • Carico: 3.79s

mentre un carrello vuoto ha questo:

  • 22 richieste
  • 8,2 KB trasferiti (resto memorizzato nella cache dal disco o dalla memoria)
  • Finitura: 2.78s
  • DOMContentLoaded: 1.22s
  • Carico: 2,65 secondi

Sto usando Redis per la memorizzazione nella cache e tutte le cache sono attive. Javascript è minimizzato, unito e raggruppato, nonché CSS e HTML. Il server è abbastanza ben posizionato con 8 CPU, 16 GB di RAM e un SSD. Caricare ecc. Non è mai abbastanza alto per essere menzionato. Fondamentalmente il server sta dormendo ...

Ci sono solo ~ 80 prodotti e un negozio. Non utilizziamo la parte di contenuto di Magento. Solo le pagine dei dettagli del prodotto, il checkout e l'area clienti (così come il backend) sono serviti da Magento. Esiste un sistema CMS "di fronte" a Magento che serve pagine in meno di un secondo totale inclusi i media.

Vedo che TTFB per il documento di checkout è già 5.66s. Con il profiler Magento abilitato riesco a trovare ciò che magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_bodycausa la maggior parte del tempo. Sebbene non sia abbastanza chiaro cosa lo causi esattamente. Qui il profiler non può aiutare molto (almeno io).

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

Ho anche abilitato il profiler del database, ma nessuna query richiede più di 1 ms anche se ci sono quasi 120 chiamate. Ma questo aggiunge solo 120ms allora.

Ho generato un profilo xdebug localmente e posso vedere che la maggior parte del tempo è sprecata nel caricamento automatico. Ma non sono sicuro che sia "normale". Mi chiedo solo perché file_exists sia chiamato così spesso. Come ho avuto l'impressione, tutto è precompilato e memorizzato nella cache. Uso composer dump-autoload -o --apcudopo aver compilato di. E ovviamente apc è attivo e funzionante.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Eppure sono bloccato qui per ora. Non riesco a capire perché il TTFB sia già di 5 secondi. E anche se ho risolto che ci sono ancora altri 10 secondi da spiegare e correggere. La mia ipotesi principale è attualmente che queste siano alcune richieste xhr nel blocco in background. Vale a dire. Vedo che i metodi di spedizione stimata iniziano solo dopo un intervallo intensamente lungo di circa 7 secondi a 13 secondi e impiegano circa 647ms. Perché aspetta così tanto per innescarlo? Fino al termine, viene visualizzata l'animazione del caricatore che fa apparire la pagina "bloccata".

"ritardo" dei metodi di spedizione preventiva

caricamento della pagina di checkout

Qualsiasi input è molto gradito! Spero in un caricamento della pagina di 2-4 secondi max. come è quello che ho iniziato con.

Modifica: ho corretto il TTFB alto. Come detto sto usando Redis per la memorizzazione nella cache. Anche per la memorizzazione nella cache delle sessioni ma porta a un blocco tra due sessioni concorrenti. In realtà è la richiesta di pagamento e la richiesta di spedizione stimata che porta a un timeout di 5 secondi. Sono tornato alla normale modalità file. Purtroppo questo non ha risolto affatto il lungo tempo di caricamento! La mia ipotesi attuale è che qualcosa fa aspettare i metodi di spedizione preventiva prima di essere chiamato, causando un blocco della pagina. Inoltre, ho cercato di rinviare tutti i JS senza alcuna modifica.

Edit2: Come @ peter-ocallaghan nota che il problema con il caricamento del checkout così lento (+10 secondi) è in realtà solo un problema specifico di Chrome con la console di sviluppo aperta. Il checkout / carrello non sembra essere interessato.


non ne so molto di più. ho riscontrato questo problema quando stavo chiamando API o plugin di terze parti. Ciò si è verificato quando non ho ricevuto alcuna risposta da esso.
55840

Attualmente sto cercando di eliminare tutto ciò che potrebbe interferire. Sto anche chiamando un API di terze parti, quindi l'ho spento per un test. Nessun cambiamento. Finora non sono riuscito a escludere ciò che rende il caricamento della pagina così lento.
steros,

Ho intenzione di uscire su un arto e indovinare che se chiudi il debugger di Chrome il tempo "magicamente" scenderà (o almeno significativamente più vicino) al tempo di caricamento di 2-4 secondi. Durante le indagini sui siti M2 live, non riuscivo a capire come i commercianti avrebbero accettato tempi di caricamento di 15 secondi. Alla fine mi sono reso conto che utilizzando il debugger di Chrome come meccanismo di temporizzazione, stavo inavvertitamente rallentando la richiesta di un ordine di grandezza.
Peter O'Callaghan,

Stavo solo testando questo. La maggior parte delle pagine impiega ancora almeno ~ 4 secondi e si carica fino a 7 secondi. Ma almeno il checkout non si carica in 15 secondi in tutti gli altri browser, più come 5 secondi. Sembra che questo sia qualcosa con Chrome.
steros,

Sono riuscito a ridurre ulteriormente il tempo utilizzando memcached per la cache di sessione. Come accennato, ho usato redis ma questo ha portato al blocco, quindi sono tornato ai file ma sembra che anche i blocchi. Quindi sono passato a memcached e ora il carrello si carica in ~ 2 secondi al secondo caricamento e 5-7 secondi al primo. Sembra che i metodi di spedizione preventiva e le informazioni sui totali siano il blocco qui. Se ricarico il carrello senza alcuna modifica, sono 2 secondi. Se aggiungo un prodotto o cambio semplicemente la quantità e aggiorno il carrello -> 5-7 secondi.
steros,

Risposte:


3

Sembra che il mio problema principale sia la concorrenza della sessione che si verifica per qualsiasi motivo. Ho provato a utilizzare la memorizzazione nella cache di sessione con Redis come proposto nella documentazione.

'session' =>
array (
  'save' => 'redis',
  'redis' =>
  array (
    'host' => '127.0.0.1',
    'port' => '6379',
    'password' => '',
    'timeout' => '2.5',
    'persistent_identifier' => '',
    'database' => '2',
    'compression_threshold' => '2048',
    'compression_library' => 'gzip',
    'log_level' => '1',
    'max_concurrency' => '6',
    'break_after_frontend' => '5',
    'break_after_adminhtml' => '30',
    'first_lifetime' => '600',
    'bot_first_lifetime' => '60',
    'bot_lifetime' => '7200',
    'disable_locking' => '0',
    'min_lifetime' => '60',
    'max_lifetime' => '2592000'
  )
),

Ma poiché ho il problema di blocco della sessione, penso che questo venga preso in considerazione:

break_after_frontend

Numero di secondi da attendere prima di provare a rompere il blocco per la sessione frontend (ovvero storefront).

Ciò significa che c'è sempre un ritardo di max. 5 secondi. Quando sono passato alla sessione memcached è leggermente migliorato perché l'attesa è stata inferiore. L'impostazione predefinita è queste impostazioni:

memcached.sess_lock_wait_min => 1000
memcached.sess_lock_wait_max => 2000
memcached.sess_lock_retries => 5

Questi sono i valori predefiniti di una versione precedente di php-memcached. La versione più recente propone queste impostazioni predefinite:

memcached.sess_lock_wait_min => 150
memcached.sess_lock_wait_max => 150
memcached.sess_lock_retries => 200

Dopo aver letto questi due: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269

Ho provato con:

ini_set('memcached.sess_lock_wait_min', 150);
ini_set('memcached.sess_lock_wait_max', 150);
ini_set('memcached.sess_lock_retries', ini_get('max_execution_time') * 1000 / 150);

nell'indice.php di Magento e questo accelera di nuovo il processo. Ora ricevo un carico del checkout in circa 4 secondi. Il carrello è un po 'più lento con ~ 5 secondi a causa del caricamento di informazioni sui totali. (tutti prima provano senza cache del browser)

Suppongo che risolvere il problema di blocco della sessione acceleri nuovamente i tempi di caricamento poiché guardando i profili rivela che c'è ancora un'attesa session_start()da 300 a 800 ms per diverse chiamate.


Sono anche bloccato su questo Sateros. Sto usando la vernice con una soluzione alternativa per https e Redis. Il sito è lento. Ho guardato attraverso newrelic e non riesco a trovare la risposta conclusiva. È il problema di Redis?
Adarsh ​​Khatri,

1

Possibili ottimizzazioni:

Profiler


0

Usando Solar o Memcache o Varnish, puoi velocizzare il tuo sito magento.


Sto usando Redis e memcached. Non riesco a usare Varnish in quanto non supporta https e non voglio usare una delle soluzioni alternative.
steros,

@steros Visualizza il mio profilo, Profilo di rete per informazioni di contatto e contattami tramite Skype per assistenza.
Wilson Hauck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.