Se sono interessato all'aumento di prestazioni, è possibile eseguire il secondo blocco più rapidamente?
Poiché gli script verranno scaricati ed eseguiti in modo asincrono, sì, ridurrà il tempo di caricamento della pagina.
L'autore dello Script-injected "async scripts" considered harmful confronta tre metodi di inclusione di uno script: uno script inserito, uno script di blocco e uno script con attributo async
. Il risultato è:
script execution onload
----------------- ------------------ --------
script-injected ~3.7s ~3.7s
blocking script ~2.7s ~2.7s
async attribute ~1.7s ~2.7s
Come si vede, l'attributo async
offre le migliori prestazioni. Se l'ordine di esecuzione degli script non ha importanza, dovresti assolutamente usarlo.
quanto riguarda la tua domanda del titolo:
Do browser eseguire script caricati in un singolo thread?
Sì, perché JavaScript è a thread singolo, ma non importa in termini di prestazioni. Il download di uno script richiede molto più tempo rispetto all'esecuzione effettiva, quindi è necessario concentrarsi sull'ottimizzazione della parte di download.
Ho fatto un test. Ho creato un semplice script:
for (var i = 0; i < 1e8; i++);
ho messo lo stesso copione in due file, test1.js
e test2.js
.Poi ho fatto due file HTML, la prima senza async
e la seconda con:
test1.html
:
<!DOCTYPE html>
<script src="test1.js"></script>
<script src="test2.js"></script>
test2.html
:
<!DOCTYPE html>
<script src="test1.js" async></script>
<script src="test2.js" async></script>
Poi ho aperto questi file HTML nel browser e controllato Timeline scheda in Chrome DevTools:
test1.html
:
test2.html
:
Come si vede, in entrambi i casi gli script non vengono eseguiti in modo asincrono.
Vedere anche: Is JavaScript guaranteed to be single-threaded?.
Devo testare qualcosa ancora? –
Penso che il tempo sarà lo stesso per l'esecuzione generale in entrambi i metodi, ma in 'async' possiamo mostrare i dati importanti come HTML più velocemente. Questa è completamente la mia opinione. –