2011-01-04 24 views
13

Esiste comunque la possibilità di controllare un client se jQuery è stato caricato prima da un CDN? Voglio dire di avere codice come questo:Come verificare se jQuery è già nella cache?

if (jQuery.isLoadedFromCDN) 
//DoNothing 
else 
//load from internal resource 

NOTA che io non voglio controllare che jQuery è caricato, ma in particolare se è stato caricato da un CDN.

Il contesto è che ho un'app Web LAN interna che utilizza jQuery, il caricamento di jQuery dalla LAN è decisamente più veloce ma se è già stato scaricato da un CDN (che probabilmente è il caso), allora voglio solo usare che altrimenti voglio ottenerlo dalla nostra risorsa interna, non dal cdn. Il risparmio di larghezza di banda non è sicuramente enorme, ma sono più curioso di sapere se è tecnicamente possibile.

risposta

0

per quanto ne so, non è davvero possibile. 2 cose saltano in mente, tuttavia, che può aiutare a:

  1. Uso Etags: identificare le risorse sul lato server web. In questo modo, il tuo browser funziona per te: identifica se una risorsa è già caricata, indipendentemente dal dominio che è stato caricato da
  2. Se vuoi veramente sapere da quale dominio è stato caricato jQuery, puoi fare richieste AJAX fittizie. È possibile eseguire solo richieste AJAX dallo stesso dominio da cui è stata caricata la libreria (ad eccezione di ofcourse quando si effettua una richiesta JSONP). Pertanto, se jQuery è stato caricato dalla risorsa LAN, i trplies verranno inoltrati alle richieste AJAX sul server Web LAN e questo esclude la CDN.

Speranza che aiuta,

Bart

3

Sto indovinando si sta controllando per vedere se jQuery è stato caricato dalla Google Libraries API?

Il browser memorizzerà nella cache di jQuery sia dal CDN che dalla LAN. Se è già presente nella cache di un precedente recupero dalla CDN, verrà caricato più velocemente della LAN. Se non è già presente nella cache da una visita precedente al tuo sito o da un altro sito che utilizza lo stesso CDN, sarà necessario caricarlo una volta sola: le visite successive verranno caricate dalla cache.

La suddivisione dell'URL per jQuery tra il CDN e la LAN causerà l'archiviazione nella cache di due copie. Lascia che la cache del browser faccia ciò che era destinato a fare. :)

1

Questo dovrebbe farlo:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script> 
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.4.js"%3E%3C/script%3E'))</script> 

È necessario adattare il percorso per il fallback, che dovrebbe trovarsi al vostro dominio.

+0

Cosa c'è che non va con 1.4.4 ?! – lonesomeday

+0

@lonesomeday: appena risolto, ho copiato quelle righe da una fonte precedente. – jAndy

+0

@jAndy unescape è deprecato! puoi suggerire un'alternativa migliore? – equitharn

Problemi correlati