2013-05-13 13 views
9

Questa domanda è stata posta più volte ma non specifica per questo esempio.Moduli specifici di busting della cache con RequireJS

Ecco una panoramica della nostra applicazione:

  • del server di routing semplice con espresso sul nodo
  • pagina unica di domanda spina dorsale
  • moduli di base e le librerie (JS/CSS) che non cambiano
  • widget JS/MENO/file HTML che cambiano di frequente

Durante lo sviluppo, sto cercando di memorizzare nella cache busto i file che cambiano ma non quelle librerie di base per velocizzare la ricarica della mia pagina e velocizzare il mio sviluppo.

ho trovato spiegazioni su:

  1. Cache Busting su RequireJS - here
  2. spiegazione Cache Busting moduli specifici - here

Può la soluzione:

  1. Spiegare come funziona il busting della cache di requireJS?
  2. Fornire una soluzione per questo scenario specifico.

risposta

4

la cache-busting opere aggiungendo una stringa di query sempre unico alla fine di ogni file che viene richiesto. Fa uso del valore di configurazione di RequireJS urlArgs; RequireJS si prende cura di esso per voi aggiungendo:

urlArgs: "bust=" + (new Date()).getTime() 

La parte (new Date()).getTime() è solo un modo semplice per ottenere una stringa univoca di JavaScript. È possibile eseguire alcune variazioni su Math.random(), ma l'utilizzo di number of milliseconds since the epoch garantisce l'univocità, per ottimizzare la cache-bustage.

penso che il signor Burke sta suggerendo qualcosa come:

require.config({ 
    baseUrl: '/base/path', 
    paths: { 
     'fileAlias': 'fileLikelyToChange?bust=' + (new Date()).getTime(), 
     'anotherFileAlias': 'anotherFileLikelyToChange?bust=' + (new Date()).getTime(), 
     'jQuery': 'jQuery' 
    }, 
}); 

Così, invece di l'onnipresente urlArgs busting della cache, lo si applica specificamente a ciascun file, che è destinata a cambiare; quindi, escludendo eventuali librerie.

non l'ho provato, ma mi piacerebbe probabilmente in ordine fino a qualcosa di simile:

function bust(path) { 
    return path + '?bust=' + (new Date()).getTime(); 
} 

require.config({ 
    baseUrl: '/base/path', 
    paths: { 
     'fileAlias': bust('fileLikelyToChange'), 
     'anotherFileAlias': bust('anotherFileLikelyToChange'), 
     'jQuery': 'jQuery' 
    }, 
}); 
+1

Grazie - per quanto riguarda i file inclusi nella mia applicazione ma non citati nell'oggetto require.config - paths? – imrane

+0

Per quello scenario, non penso che ci sia una soluzione facile. Sto solo descrivendo ciò che penso sia stato suggerito nel problema GitHub. Non penso che tu abbia davvero altre opzioni, a meno di modificare la fonte di RequireJS o fare un elaborato trucco. – c24w

0

Basta ricordare che se si ha realmente bisogno di fare affidamento su qualche script esterno che è possibile utilizzare al posto di $.getScript è necessario assicurarsi che sia incluso. Ho alcuni script non-amd che sono per l'integrazione di terze parti (ad esempio pagamenti Amazon), che ho usato getScript per invece di richiedere. Se è possibile utilizzare questo metodo, evitare di inviare i parametri di busting della cache da urlArgs al server esterno.

Problemi correlati