it-swarm-eu.dev

Caratteri estranei all'esterno dell'HTML che causano un caricamento della pagina eccezionalmente lento

Mi è stato consegnato un problema per vedere dove le pagine di un sito venivano caricate in modo eccezionalmente lento - stiamo parlando da 13 a 20 secondi. Il sito è ovviamente personalizzato con vari componenti aggiuntivi. Ho fatto qualche ricerca e ho abilitato il normale debug e controllato il profilo che mostrava una certa lentezza in varie aree, ma nessuna delle quali ha totalizzato il tempo di caricamento della pagina intera. In effetti alcuni strumenti di scansione delle pagine, tra cui Google, non hanno riconosciuto correttamente la lentezza solo rivendicando la pagina caricata in circa 4 secondi circa (uguale al profilo).

Leggermente sconcertato l'ho scavato ulteriormente e poi ho trovato il problema usando telnet. Ecco un esempio di ciò che ho ottenuto.

In primo luogo, ho usato una richiesta GET completamente di base, ovvero:

GET / HTTP/1.1
Host: www.slowsite.somewhere

Ecco l'esempio di output:

HTTP/1.1 200 OK
Date: Mon, 03 Nov 2014 09:22:13 GMT
Server: Apache/2.4.9 (Unix)
X-Powered-By: PHP/5.3.28
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Cache-Control: no-cache
Pragma: no-cache
Set-Cookie: f3c945355423e6c96228179d74322888=tbh278qicf0cle0j8nc5pf0fu3; path=/; HttpOnly
Vary: Accept-Encoding,User-Agent
Cache-Control: max-age=2592000
Expires: Wed, 03 Dec 2014 09:22:13 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

702a
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr"><head><base href="http://XXXXXXXXXXXX/" /><meta http-equiv="content-type" content="text/html; charset=utf-8" /><meta name="generator" content="Joomla! - Open Source Content Management" /><title>Home</title><link href="http://XXXXXXXXXXX/?view=featured" rel="canonical" /><link href="/?format=feed&amp;type=rss" rel="alternate" type="application/rss+xml" title="RSS 2.0" /><link href="/?format=feed&amp;type=atom" rel="alternate" type="application/atom+xml" title="Atom 1.0" /><link href="/templates/XXXXXXXXX/favicon.ico" rel="shortcut icon" type="image/vnd.Microsoft.icon" /><link rel="stylesheet" href="/components/com_rsform/assets/calendar/calendar.css" type="text/css" /><link rel="stylesheet" href="/components/com_rsform/assets/css/front.css" type="text/css" /><link rel="stylesheet" type="text/css" href="/plugins/system/jch_optimize/assets2/jscss.php?f=953dd117283665c8de4b1dbc99fa7ebc&amp;type=css&amp;gz=gz&amp;d=30&amp;i=0"/><link rel="stylesheet" href="/modules/mod_slideshowck/themes/default/css/camera.css"

poi giù alla fine ...

<div class="footer3">© 2014 XXXXXXXXXXX. All rights reserved</div><div class="clear">&nbsp;</div><div class="footer-bottom">Company Name: XXXXXXXXXX. Company Registration No/Place of Registration: XXXXXXXXX Cardiff Registered Office Address: XXXXXXX</div></div></div></div></div></body></html>
0

Come puoi vedere, c'è del testo fuori dall'HTML. Sembra una sorta di debug dell'output di Word esadecimale. Il primo cambia continuamente (ad es. 7139, 6fc3) ma l'ultimo alla fine è sempre 0.

Spero che questo suoni un campanello con qualcuno che l'ha già visto?

Altrimenti dovrò andare a scavare in questo - non ho mai usato Joomla e PHP molto arrugginito dall'ultima volta che ho programmato con esso molti anni fa.

È interessante notare che se visualizzi la fonte della pagina in un browser (Chrome, Explorer ecc.) Non mostrano affatto questi dati extra. Totalmente invisibile. È solo se telnet al sito che lo vedi.

Quindi anche interessante è che probabilmente il trailing <newline>0<newline> dopo il </html> sembra indurre il browser a pensare che stiano arrivando più dati e non tenta di eseguire il rendering della pagina fino a quando il keepalive HTTP 1.1 predefinito scade e interrompe la connessione. È solo allora che il browser richiede CSS, Javascript, Immagini ecc. Questo è visibile dal grafico della sequenza temporale/a cascata come ad esempio tools.pingdom.com e gtmetrix.com.

Per riferimento, ma probabilmente irrilevante, il sito è ospitato con http://www.heartinternet.co.uk/ che abbiamo usato negli ultimi 7 anni e trovato abbastanza affidabile e con buone prestazioni, anche se mai aveva un sito Joomla (questo è stato sviluppato altrove)

1
Ian Macintosh

Nota che il tuo Telnet è Transfer Encoding è chunked. Così che 7139 indica 28985 byte ricevuti o 702a indica 28714 byte ricevuti.

Non ti preoccupare. Il ritardo è dovuto altrove.

2
Farahmand

Alcuni plugin di terze parti potrebbero generare lo zero.

  • Non è un output del modulo o del componente, perché dovrebbe essere incluso nell'html
  • Poiché zero viene generato dopo l'Html, viene reso prima che Joomla termini l'esecuzione, ad esempio chiudendo le sessioni.

Disattiverei, uno ad uno, tutti i plugin non core (e tutto il resto) per scoprire la causa.

2
Anibal