Uno script non ha un reale utilizzo fino al termine del caricamento dell'HTML: uno script non può modificare il DOM fino a quando non è stato caricato l'HTML. document.ready
attende il caricamento del DOM. Quindi, non ha senso trattenere cose importanti come i fogli di stile.
Inserisci gli script nella parte inferiore della pagina (prima del </body>
tag) per ordinare all'utente di trasmettere HTML e CSS il più velocemente possibile. Il browser sarà in grado di rendere la pagina molto più veloce e quindi gli script possono essere caricati, piuttosto che lasciare una pagina vuota per l'utente da guardare mentre attendono il download degli script.
Mentre il browser sta progressivamente eseguendo il rendering della pagina, se colpisce un tag script (cioè un file Javascript esterno) tutto si ferma . Gli script hanno il diritto di passaggio: durante il download di uno script, il browser non avvia altri download. vale a dire immagini e fogli di stile e qualsiasi altro download parallelo saranno bloccati, anche su nomi host diversi.
Lo svantaggio di mettere gli script in fondo alla pagina è che, poiché la pagina verrà visualizzata prima che gli script siano inizializzati, in particolare i clicker rapidi saranno in grado di interagire con il tuo sito prima che Javascript sia pronto.
Nota: è vero il contrario per i fogli di stile: i fogli di stile nella parte inferiore della pagina bloccano il rendering progressivo fino a quando tutti i fogli di stile sono stati scaricati e spostandoli nel documento HEAD
elimina il problema.
Esiste un trucco per caricare javascript senza far attendere l'utente, puoi creare un <script/>
elemento usando il createElement()
metodo DOM e aggiungerlo alla pagina appena prima del </body>
tag di chiusura :
var oScript = document.createElement("script");
oScript.src = "/path/to/my.js";
document.body.appendChild(oScript);
Il browser non inizia a scaricare lo script js fino a quando il nuovo <script/>
elemento non viene effettivamente aggiunto alla pagina. Una volta completato il download, il browser interpreta il codice Javascript contenuto all'interno.