2015-01-12 36 views
5

Ho un'annotazione @JavaScript nella mia applicazione per caricare un file .js dal classpath.Vaadin @ JavaScript: cancella la cache per il file JS aggiornato

Ora ho apportato un aggiornamento al file e ridistribuito (localmente), ma ottengo sempre indietro la vecchia versione. Ho provato a ricaricare tutto (ctrl + R, ctrl + F5) ma ciò non funziona e inoltre non vorrei che gli utenti dovessero farlo.

Un trucco che ho usato in passato (senza Vaadin) era quello di aggiungere un parametro di richiesta con la versione (ad es.? Versione = 1) e aggiornarlo affinché l'URL cambi. Ma a quanto pare ciò non è consentito per l'annotazione @JavaScript (Vaadin non tenta nemmeno di caricare il file).

+0

Forse l'app sta utilizzando l'annotazione @PreserveOnRefresh sull'oggetto dell'interfaccia utente? Ciò potrebbe impedire a Vaadin di ricaricare qualsiasi JS. –

+0

No, non sto usando @PreserveOnRefresh. Inoltre, avevo riavviato il server in modo che non avrebbe fatto la differenza. Al momento ho appena cambiato il nome del file (aggiunto _vxxx dove xxx è un numero) e questo funziona. – herman

+0

quindi stai dicendo che anche un riavvio del server ha mantenuto il "vecchio" file? potresti fare un 'find' per il file nel tuo target-dir? potrebbe essere, che è lì diverse volte (ad esempio una volta dal tuo ide e una volta dal tuo strumento di compilazione). se entrambi sono nel classpath, ne viene preso uno solo. – cfrick

risposta

2

ho superato questo utilizzando il parametro resourceCacheTime della configurazione servlet Vaadin:

@VaadinServletConfiguration(ui = MyUI.class, resourceCacheTime = 0) 

Anche ha le sue limitazioni, come descritto nella mia risposta a another question here.

1

Questa è una funzione del browser per i file JS della cache locale, niente a che fare con Vaadin.

Come capita da soli: se si desidera assicurarsi che gli utenti dispongano dell'ultima versione del file JS, è necessario rinominare il nome file JS in: script_buildNumber.js.

+0

Non sono d'accordo sul fatto che questo non ha nulla a che fare con Vaadin: ci sono modi per le applicazioni web di comunicare al browser, ad es. non memorizzare nella cache alcune risorse. Ho trovato la risposta di rinominare il file da solo, ma è davvero un trucco. Almeno essere in grado di aggiungere un parametro di richiesta mi impedisce di dover cambiare il nome effettivo del file nel controllo di versione. – herman

+0

dopo un riavvio del contenitore, il nuovo file viene definitivamente caricato fresco dal disco e un ricarico CTRL-F5 almeno in Fx nella configurazione di default tirerà il nuovo file. – cfrick

0

Utilizza la funzione di navigazione in incognito di Chrome (e non usarlo quando visiti siti web spiacevoli/sgradevoli).

Basta aprire il browser in modalità di navigazione in incognito https://support.google.com/chrome/answer/95464?hl=en e il browser non memorizzerà nulla nella cache.

Altri browser hanno questa funzione (Opera, IE, Firefox, Safari).

+0

Non vorrei che i miei utenti dovessero visitare la mia app Web in modalità in incognito per assicurarsi che abbiano gli ultimi file javascript. Vaadin dovrebbe fornire un modo per dire al browser di non memorizzarli nella cache o supportare l'aggiunta di parametri di richiesta al nome in modo che i file non debbano essere fisicamente rinominati. – herman

+0

Certo, sono d'accordo con te, pensavo che ne avessi bisogno solo per lo sviluppo. – tonix

0

Come ho notato nel mio commento sulla domanda del 12 gennaio, la modifica del file ha funzionato. Questo sembra essere attualmente l'unico modo, anche se è tutt'altro che ideale.

Problemi correlati