2012-02-21 18 views
8

Se si include jQuery da un CDN, esiste un modo per determinare se un utente ha recuperato il contenuto dal CDN o recuperato dalla cache?Trova hit/miss cache JQuery da CDN

Ovviamente un hit della cache non effettua una richiesta HTTP, ma potresti testarlo e segnalare Javascript al tuo server con i dati?

+0

A cosa serve? Sto solo pensando se vuoi recuperare da http req ogni volta che puoi aggiungere il timestamp corrente come variabile querystring che dovrebbe costringerlo a scaricarlo di nuovo. Per esempio. '' –

+1

Voglio vedere se vale la pena caricare jQuery da un CDN. Sarebbe bello avere dati reali anziché speculazioni sulla percentuale di utenti con jQuery nella loro cache. –

+0

Oh capisco :) abbastanza giusto. –

risposta

1

Perché non utilizzare solo CHARLES o un proxy di debug simile per determinare la velocità di caricamento?

Se si desidera conoscere la velocità dal punto di vista del cliente da più posizioni, utilizzare http://www.webpagetest.org/ con due versioni differenti del proprio sito Web (una con CDN, una con posizione statica ospitata autonomamente) e confrontare le velocità di caricamento. Personalmente, a meno che tu non abbia un sacco di codice javascript personalizzato, ha senso usare un CDN per jQuery, soprattutto perché molti siti utilizzano l'API di Google Libraries per jQuery.

-2

Vale sempre la pena caricare le risorse da un CDN. L'unico inconveniente è se il CDN è geograficamente vicino all'utente o meno. Devi controllare il tuo pubblico di destinazione e decidere se è meglio usarlo o meno. In caso di jquery, utilizzo sempre Google CDN che ritengo sia affidabile e robusto.

+0

Questa risposta non ha dati in allegato. Ad esempio, ora raggruppiamo jQuery minified con altri Javascript in un unico file. Suddividere jQuery comporterebbe una richiesta HTTP aggiuntiva. Non riesco a valutare questo compromesso a meno che non conosca quanti utenti hanno già il file nella cache. –

+0

Avrai sempre una richiesta aggiuntiva per elemento, comunque, la grande differenza è tra fare richieste allo stesso server o server diversi. Supponiamo che tu abbia entrambe le risorse nello stesso server, il tuo server otterrebbe 2 richieste ma servirebbe una dopo l'altra. D'altra parte se si hanno 2 risorse provenienti da server diversi, idealmente, entrambe le risorse verrebbero servite nello stesso momento e quindi visualizzate rapidamente. – Alfonso

+0

Questa risposta fa ipotesi errate. Minimizzare la sorgente jQuery insieme ad altri script in un singolo file/richiesta è discutibile più velocemente rispetto a due richieste, indipendentemente da dove si trovano. – David

0

Se si desidera aggiungere un volume a una pagina per verificare ciò, è possibile aggiungere una richiesta Ajax a un CDN per jQuery e quindi controllare le intestazioni per una risposta 304. Se quindi crei una seconda richiesta Ajax per eseguire il ping al tuo server che ti dice se jQuery è stato memorizzato nella cache o no, cioè se era una risposta 200 o 304. Non ho provato questo, ma dovrebbe funzionare, ma aggiungerà alcune richieste extra per i tuoi utenti, ma dato che saranno asincroni probabilmente non avrebbe alcun impatto.

+0

Dannazione dopo la pubblicazione Mi rendo conto che questo non funzionerà a meno che il CDN in uso non abbia intestazioni di controllo dell'accesso per consentire richieste di ajax su più domini. Qualcuno sa se qualche CDN ha impostato un'intestazione 'Access-Control-Allow-Origin'? – slashnick

+1

Purtroppo, nessuno dei tre CDN elencati nella pagina di download di jQuery (Google, Microsoft e jQuery) supporta l'intestazione Access-Control-Allow-Origin. – steveukx

0
<script>var s=new Date().getTime();</script> 
<script src="cdncontent"></script> 
<script> 
var s = new Date().getTime() - s; 
if (s < 100) { 
    //likely from cache 
} else { 
    //likely from CDN 
} 
</script>
+0

il tempo di 25 ms è solo un'ipotesi, che è improbabile che ci si possa effettivamente connettere, richiedere e scaricare il file specificato in meno di 25 ms, ma che * dovrebbe * essere sufficiente per caricare/analizzare dal locale ... si potrebbe voler modificare/testalo un po '. – Tracker1

1

Se avete la registrazione sul CDN (noi non sembriamo?) Si potrebbe modificare l'URL CDN per corse di prova e anche utilizzare un URL pingback sul server. Nel corso di un periodo di tempo, confronta i risultati e le ore dell'urb ping back con i tuoi url dell'URL CDN e i visitatori unici conteggia.

Dovresti essere in grado di farti un'idea di quanti risultati unici sul tuo cdn url hai ottenuto rispetto ai colpi unici che ottieni sulla tua pagina. La differenza dovrebbe essere bot, scrapers e cache o caricamento delle risorse non riuscito. I robot che puoi eliminare, probabilmente anche i raschietti, così il tuo% età dovrebbe essere riflettente per un periodo abbastanza lungo.

Questo lavoro potrebbe funzionare?

Facciamo questo su risorse non-cdn per vedere se le persone stanno scaricando i file CSS più recenti o non forzare un cambio di nome solo su quegli IP che sembrano aver memorizzato nella cache una risorsa dopo che è stata apportata una modifica al file css.

+0

Potrebbe funzionare, ma sto pensando di utilizzare la rete CDN di Google; non saremmo in grado di accedere da quello. –

+0

No, ma il test ti darebbe un'indicazione di quanti usi il caching in generale, che probabilmente funzionerebbe allo stesso modo per sapere quanti usano il CDN da google? Oltre a questo, è un ottimo punto: non sono sicuro di come lo fareste diversamente. – MyStream

1

Provare per un 304 (non modificato) sarebbe difficile senza usare ajax. E usare ajax sarà molto difficile a meno che non si riesca ad aggirare lo stesso criterio di origine sul CDN.

Presumo che si desideri verificare l'ora effettiva in cui gli script vengono caricati e diventano disponibili sui client e si desidera confrontare questi dati utilizzando CDN rispetto a qualcosa di locale. Se è così, non sarebbe meglio testare l'ora effettiva invece di fare qualche test della cache?

È abbastanza semplice impostare un test A/B del tempo effettivo in cui vengono caricati gli script.

Per la A test che si potrebbe fare il CDN/separazione locale

<script>var _time = new Date().getTime();</script> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script src="project.js"></script> 
<script>_time = new Date().getTime() - _time;</script> 

E il test B un'unione script locale o qualsiasi altra cosa:

<script>var _time = new Date().getTime();</script> 
<script src="project.includingjquery.min.js"></script> 
<script>_time = new Date().getTime() - _time;</script> 

poi riferire la variabile _time in analisi o nel proprio database utilizzando Ajax. Se gli utenti di B hanno un valore inferiore a _time segnalato, sai che è il modo giusto per andare ...