2013-04-29 14 views
9

Ho visto un paio di pagine caricare i loro file javascript in una pagina tramite il nuovo Image.src = '';Download di una libreria Javascript come immagine?

<script type="text/javascript"> 
     new Image().src = "XXXX\/js\/jquery-1.7.2.min.js"; 
    </script> 

Mi stavo chiedendo i vantaggi o lo scopo di questo.

+1

utilizzato per il precaricamento delle immagini o il tracciamento dei clic. –

+1

@DavorMlinaric Ma ovviamente non stanno caricando un'immagine qui. Stanno caricando jQuery. Click-tracking? Può essere. –

+1

Puoi fornire un collegamento a un esempio del mondo reale?Direi che l'intento è precaricare la libreria, quindi un caricamento futuro verrà caricato dalla cache (non ho idea del motivo per cui avresti mai bisogno di farlo, però). – apsillers

risposta

7

È un modo rapido e sporco di avviare una richiesta HTTP (come suggeriscono i commenti sulla domanda).

Potrebbe esserci un piccolo vantaggio ottenuto avviando il download nella parte superiore della pagina e quindi includendo <script src='the-same-file.js'></script> nella parte inferiore della pagina in modo che il file possa essere caricato dalla cache del browser.

Questo consente di parallelizzare la latenza del download con un'attività di analisi. Ad esempio, il download avviato su head potrebbe essere eseguito mentre è ancora in corso l'analisi di body.

Perché non basta fare riferimento al file in testa utilizzando l'attributo src?

Se c'è né [la rinviare o asincrono] attributo, lo script è recuperato e eseguito immediatamente, prima che l'agente utente continua analizzare la pagina .

Source (suggested reading)

In altre parole, questo metodo tenta di consentire al browser per scaricare il file senza incorrere il comportamento di blocco fino al più tardi nel processo.

Tuttavia

  • Se questo è davvero necessario, vorrei prendere in considerazione l'attributo defer che è destinata a tali scopi, piuttosto che il new Image() hack.
  • Questa "ottimizzazione" potrebbe ritorcersi contro a seconda di cache headers. Si potrebbe finire per fare due richieste HTTP o addirittura scaricare il file due volte.

"in the wild"

Una rapida indagine dei numerosi siti principali (ricerca di Google, Gmail, Twitter, Facebook, Netflix) dimostra che questa tecnica non viene utilizzata per recuperare i file JavaScript e usato molto con parsimonia generale.

Ad esempio, Facebook sembra utilizzarlo non per la memorizzazione nella cache/prestazioni, ma per scopi di monitoraggio quando il sito è (potenzialmente maliziosamente) caricato in un set di frame. Creando un'istanza Image e impostando l'origine, avvia una richiesta HTTP a una pagina che tiene traccia del tentativo clickjacking.

Questo è un caso isolato; in circostanze normali questo script non verrà mai eseguito.

Problemi correlati