caching - Tøm hurtigbufferen i JavaScript
Hvordan tømmer jeg en nettlesers cache med JavaScript?
Vi distribuerte den nyeste JavaScript-koden, men vi klarer ikke å få tak i den nyeste JavaScript-koden.
Redaksjonell merknad: Dette spørsmålet er delvis duplisert på følgende steder, og svaret i det første av følgende spørsmål er sannsynligvis det beste. Dette aksepterte svaret er ikke lenger den ideelle løsningen.
Hvordan tvinge nettleseren til å laste inn bufrede CSS/JS-filer på nytt?
Hvordan kan jeg tvinge klienter til å oppdatere JavaScript-filer?
Dynamisk last inn lokal Javascript-kilde/json-data på nytt
Svar #1
Oppdatering: Se location.reload() har ingen parameter for bakgrunn på denne ikke-standard parameteren, og hvordan Firefox sannsynligvis er den eneste moderne nettleseren med støtte.
Du kan ringe window.location.reload(true) for å laste den nåværende siden på nytt. Det vil ignorere eventuelle bufrede elementer og hente nye kopier av siden, CSS, bilder, JavaScript osv. fra serveren. Dette tømmer ikke hele cachen, men har effekten av å tømme cachen for siden du er på.
Imidlertid er din beste strategi å versjonere banen eller filnavnet som nevnt i flere andre svar. I tillegg, se Gjøre Filnavn Versjonerte: ikke bruk querystring av grunner til å ikke bruke ?v=n som din versjoneringsmetode.
Svar #2
Du kan ikke tømme hurtigbufferen med JavaScript. En vanlig måte er å legge til revisjonsnummeret eller sist oppdaterte tidspunkt til filen, slik som dette:
myscript.123.js
eller
myscript.js?updated=1234567890Svar #3
Prøv å endre src på JavaScript-filen? Fra dette:
<script language="JavaScript" src="js/myscript.js"></script>
Til dette:
<script language="JavaScript" src="js/myscript.js?n=1"></script>
Denne metoden bør tvinge nettleseren din til å laste en ny kopi av JS-filen.
Svar #4
Bortsett fra å mellomlagre hver time eller hver uke, kan du mellomlagre i henhold til fildata.
Eksempel (i PHP):
<script src="js/my_script.js?v=<?=md5_file('js/my_script.js')?>"></script>
eller til og med bruke filens endringstid:
<script src="js/my_script.js?v=<?=filemtime('js/my_script.js')?>"></script>
Svar #5
window.location.reload(true) ser ut til å ha blitt foreldet i henhold til HTML5-standarden. En måte å gjøre dette på uten å bruke spørringsstrenger er å bruke Clear-Site-Data-headeren, som ser ut til å bli standardisert.
Svar #6
Du kan også tvinge koden til å lastes inn på nytt hver time, slik som dette, i PHP:
<?php
echo '<script language="JavaScript" src="js/myscript.js?token='.date('YmdH').'">';
?>
eller
<script type="text/javascript" src="js/myscript.js?v=<?php echo date('YmdHis'); ?>"></script>
