Domanda

Questo è dal Index.html in Caldaia HTML5 , appena prima del tag </body>:

<!-- JavaScript at the bottom for fast page loading: http://developer.yahoo.com/performance/rules.html#js_bottom -->

<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.7.2.min.js"><\/script>')</script>

<!-- scripts concatenated and minified via build script -->
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
<!-- end scripts -->

<!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
     mathiasbynens.be/notes/async-analytics-snippet -->
<script>
  var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
  (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
  g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
  s.parentNode.insertBefore(g,s)}(document,'script'));
</script>
.

So che i tag di script possono bloccare i download paralleli, motivo per cui Si consiglia di metterliin basso .

La mia domanda: Il browser attende davvero JQuery di essere completamente scaricato ed eseguito prima ancora di scaricare il download del plugins.js e poi il script.js?

o guarda avanti e avvia tutti gli script scaricando il più rapidamente possibile (in parallelo) e basta ritardare l'esecuzione di ogni script fino a quando non ha il precedenteEsecuzione finita?

È stato utile?

Soluzione

.

La mia domanda : Il browser attende davvero JQuery per essere completamente scaricato ed eseguito prima che inizi a scaricare plugins.js e poi il script.js?

può o non può, ma probabilmente no; I browser tentano (entro i limiti) per parallelizzare i download per rendere il caricamento della pagina veloce.

.

o guarda avanti e avvia tutti gli script che scaricano il più rapidamente possibile (in parallelo) e basta ritardare l'esecuzione di ogni script fino a quando il precedente non ha finito l'esecuzione?

Destra, perché quella parte è richiesto da La specifica (nell'assense degli attributi async o defer). E come mostra il tuo esempio, non può nemmeno determinare necessariamente l'ordine in cui gli script dovrebbero essere eseguiti fino a quando lo script è eseguito, poiché lo script potrebbe inserire un altro script. Ma può scaricarli e farli pronti.

Altri suggerimenti

Ho trovato questi dettagli una risposta più appropriata a questa domanda, copiata sotto i contenuti da http://www.html5rocks.com/en/tutorials/speed/script-loading/ Segnalalo per ulteriori dettagli.

La specifica HTML5 dice:

.

Se né attribuisci [I.e.Async e rinviare] sono presenti, quindi lo script è recuperato e eseguito immediatamente, prima che l'agente utente continua a analizzare il Pagina.

Se la pagina non è analizzata, l'agente utente non può sapere quali risorse successive hanno bisogno di recupero, quindi un browser rigorosamente conforme non dovrebbe essere in grado di recuperare ulteriori risorse fino a quando il primo è stato effettivamente eseguito.

Per capire perché questo ha senso, immagina che il primo script contiene

document.write("<!--"); 
.

Con nessuna chiusura dei commenti corrispondenti, tutto ciò che segue lo script nel markup diventerà parte di un commento finché non si incontrerà il successivo -->.Ciò potrebbe causare saltare uno o più riferimenti di risorse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top