Qui è la mia situazione: ho aggiunto dinamicamente 2 script attraversoCome utilizzare jQuery per gestire i tag script aggiunti dinamicamente in parallelo
$('body').append('<script src="http://localhost:8080/script_1.js"></script>');
$('body').append('<script src="http://localhost:8080/script_2.js"></script>');
Poi ho scoperto che sarebbero caricati in sequenza anziché parallelo dalla console cromata.
Tuttavia, essi potrebbero essere caricati in parallelo se uso sia js nativi
document.body.appendChild(script);
o la funzione jQuery: getScript
$.getScript('http://localhost:8080/script_1.js');
ho cercato un sacco e ha scoperto che jQuery in realtà sarà rimuovere lo script tag, analizza il sorgente e usa la sua funzione ajax $ .ajax() per caricare script invece di lasciarlo gestire al browser. Ma la funzione $ .getScript() usa anche $ .ajax() e non ha alcun blocco. Ovviamente, non è colpa di $ .ajax().
Qui è un banco di prova: Vai http://jquery.com e incollare seguente script nella console che aggiungerà un file js due volte attraverso jQuery
$('body').append('<script src="/jquery-wp-content/themes/jquery/js/plugins.js"></script>');
$('body').append('<script src="/jquery-wp-content/themes/jquery/js/plugins.js"></script>');
Controllare la timeline, troverete che vengono caricati in sequenza . Ovviamente, posso usare js nativi o $ .getScript() sopra per risparmiare tempo.
Tuttavia, voglio sapere perché? Perché queste chiamate jQuery ajax dall'aggiunta di tag script non sono in parallelo?
Aggiornamento
Più interessante, sembra la sequenza si applicano solo allo script da la stessa origine. Ho provato a caricare alcuni file js sotto forma di librerie ospitate da google e sono in parallelo. Provato in seguito anche in http://jquery.com
$('body').append('<script src="https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core.js"></script>');
$('body').append('<script src="https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core.js"></script>');
"Gli script creati dinamicamente e aggiunti al documento sono asincroni di default" in base a [questo articolo] (http://www.html5rocks.com/en/tutorials/speed/script-loading/) ma non lo fa spieghiamo perché questo non è il caso degli script locali aggiunti da jQuery. – Moob
@Moob si, lo so ... come ho detto, posso usare pure javascript 'document.body.appendChild (script);' per caricare e sì, sono paralleli ... ma voglio solo scoprire cosa è fatto segretamente per rendere il mio caso sequenziale –
Ci sono alcuni indizi nella specifica https://html.spec.whatwg.org/multipage/scripting.html#script ma - nelle loro parole: "I dettagli esatti di elaborazione per questi attributi sono, per ragioni per lo più storiche, in qualche modo non banali, coinvolgendo una serie di aspetti dell'HTML: i requisiti di implementazione sono quindi necessariamente racchiusi in tutte le specifiche ... " – Moob