Avatar billede jdjensen Juniormester
10. juli 2012 - 09:24 Der er 8 kommentarer og
1 løsning

Clear Cache script

Hej,

Jeg har flere steder set udviklere køre en parametre i url'en (?clearcache=true) der sletter cachen på serveren så det nyeste indhold bliver præsenteret for brugeren.

Hvordan sættes sådan en parametre lige op i .net så jeg f.eks. bare kan køre en url der hedder noget i stil med nedenstående:

www.domain.dk?clearcache=true
Avatar billede jdjensen Juniormester
10. juli 2012 - 09:56 #1
Kan man gøre noget i stil med dette:

Funktionen:

eraseCache(){
  window.location = window.location.href+'?eraseCache=true';
}

Og så have noget i stil med dette liggende i en script-fil jeg kalder fra <head>?

<?php
  $cache = '';
  if(isset($_GET['eraseCache'])){
    echo '<meta http-equiv="Cache-control" content="no-cache">';
    echo '<meta http-equiv="Expires" content="-1">';
    $cache = '?'.time();
  }
?>

Ovenstående er bare et eksempel jeg fandt fra et forum. Det sidste er dog PHP, og vil gerne holde det i JS?
Avatar billede jdjensen Juniormester
10. juli 2012 - 10:35 #2
Det må være nogle af disse metas som js-funktionen (?eraseCache=true) skal køre for at slette cachen Før siden reloader, men hvordan? ;-)

<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
Avatar billede DeeDawg Nybegynder
10. juli 2012 - 12:39 #3
Tror du misforstår nogle ting. Den form for cache vi taler om her, benyttes af folks browsere for at kunne vise ting hurtigere istedet for at skulle downloade det samme hver gang du besøger siden. Det har intet med webserveren at gøre.

Derudover, kan du ikke stole blindt på <meta> tags. Det eneste du kan stole på er at sende rigtige headers, istedet for at hacke dig frem til det.

Den bedste måde at styre dette på er, at tilføje en form for ID til filerne fx style.css?v=123. Når der så er ændret i filen, opdateres dette ID. Denne form for løsning kan dog af flere grunde ikke implementeres ordentligt via JavaScript. Og desuden bør JavaScript heller ikke bruges til sådan en opgave i det hele taget.
Avatar billede olebole Juniormester
10. juli 2012 - 15:51 #4
<ole>

- og udover af headers, afhænger caching mønsteret også af brugerens indstillinger i browseren.

Jeg kan dog ikke undlade at spekulere over, om du er helt klar over, i hvilken kategori, du befinder dig. Du spørger om en fremgangsmåde i .net - og befinder dig i JavaScript kategorien.

Skulle det ikke skyldes forvirring - ja, så er jeg lidt forvirret  :D

/mvh
</bole>
Avatar billede olebole Juniormester
10. juli 2012 - 16:57 #5
Under alle omstændigheder må vi lige finde ud af, om du taler om server cache - eller klient cache.

Sharepoint cacher således nogle binære objekter på serveren. De kan flushes med nogle direktiver, som din kode kan sætte, når en bestemt parameter modtages i URL'en.

Ekspemlet i spørgsmålet kunne pege i den retning - men så er det nok ikke en hensigtsmæssig kategori, du har stillet spørgsmålet i  =)
Avatar billede jdjensen Juniormester
11. juli 2012 - 09:34 #6
Hej olebole ;-)

Kategorien er den rigtige da min tanke er at finde en løsning der kan bruges uden indblanding af PHP eller .NET.
Kom desværre til at nævne .NET i min beskrivelse da det er på en hjemmeside med denne teknologi funktionen først og fremmest skal bruges men vil også gerne kunne bruge den på en PHP server senere.

Ang. funktionen så tror jeg det er server cachen jeg hentyder til. Det lyder meget mere problematisk hvis det er klientcachen man vil pille ved.

Problemet opstår når jeg f.eks. ændrer noget design eller tekst og trykker reload, så er det ikke altid siden opdaterer med det seneste indhold. Så må man lave en CTRL-F5 eller gå ind i internet-indstillinger og slette temp. internet files for at designændringerne slår igennem.
Så det jeg ønsker er mere eller mindre en nem parametre jeg lige kan køre (f.eks. www.domain.dk/?clearcache=true) og så refresher serveren alle sider på hjemmesiden med det seneste indhold?

Jeg ved ikke helt hvad der er best practice men håber jeg fik det bedre forklaret? :-)
Avatar billede jdjensen Juniormester
11. juli 2012 - 12:17 #7
...og jeg flytter også gerne spørgsmålet til en anden kategori hvis javascript ikke lige er bedst egnet til at løse problemet. Jeg vil bare gerne finde en løsning som hurtigt kan implementeres uanset om det er en .net eller php server. :-)
Avatar billede olebole Juniormester
11. juli 2012 - 14:56 #8
Det oplevede fænomen har intet med serveren at gøre. Det handler om din clientcache - og nej, det kan du ikke få en 'overall' funktion til.

I det hele taget lyder dit spørgsmål lidt sært. Du forventer - som jeg læser dine indlæg - at kunne få en JavaScript kode, som bliver afviklet med en bestemt parameter i et serverkald. JavaScript afvikles jo på klienten, så jeg forstår vist ikke lige tankerækken  =)

Løsningen er at sætte passende headers - ikke HTML-meta'er. Prøv at kikke på eksempel 2. Sådanne headers fungerer på dokumentplan, så det er ikke en funktion på serveren, du bare kan kalde og derved fixe alle cachceproblemer.

Under alle omstændigheder, så skal opgaven løses med serversprog og ikke med JavaScript. Du er derfor nødt til at bruge forskellige koder under .net og PHP - selvom de ligner hinanden lidt  =)
Avatar billede jdjensen Juniormester
17. juli 2012 - 12:31 #9
Ja ok. Jeg lukker denne. Er nok nød til at søge lidt hjælp til at lave det i .net, men prøver lige at læse lidt på området først.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester