Server-side cache giver fart på webserveren

En simpel måde at optimere de dynamiske websider er at generere HTML-koden på forhånd. Der kan spares processorkraft og databasekald, og loadingtiderne nedsættes.

Hvad er cache

En forholdsvis nem måde at optimere ydelsen på dynamisk producerede websider er at generere koden på forhånd. Det kan lyde lidt paradoksalt, for forskellen mellem statiske og dynamiske websider er jo netop, at indholdet på de sidstnævnte ændrer sig over tid. Men for mange websites dækker de dynamiske sider over et publiceringssystem, hvor en stor del af indholdet kun ændres sjældent. Situationen bliver dog mere mudret af, at enkelte elementer, som for eksempel bannere, skal skifte for hver enkelt forespørgsel.

Hvis genereringen af en enkelt side kræver en større mængde processeringsarbejde og databasekald, kan cache - midlertidig lagring af webindhold - være en nem måde at få has på flaskehalsene.

Hvad er cache
Når talen drejer sig om websider, betyder cache en midlertidig lagring af kopieret webindhold, tættere på slutbrugeren. Det kan være lokalt i browseren, ved en proxy-server, eller direkte i den kode, som genererer websiderne.

Tre metoder

Fordelene og spørgsmål
Et dynamisk websted bygger ofte på en relationsdatabase, som indeholder de forskellige elementer, som siderne opbygges af. Hvis en forside kræver adskillige kald til den bagvedliggende database, eller hvis der indgår en stor mængde kode bag genereringen, så kan caching reducere loadingtider ganske drastisk og nedsætte belastningen på web- og databaseserverne.

De spørgsmål, man skal forholde sig til, når man implementerer server-side cache i sine webscripts og webprogrammer, er hvad der skal caches, og hvor cachen skal gemmes.

Tre typer caching
Man kan groft opdele server-side caching i tre typer:

  • Data-caching
    Her gemmes de data, som oftest hentes fra den bagvedliggende datakilde. Det vil ofte være brugbart, hvis der er tale om en kompleks SQL-sætning, som trækker mange ressourcer.
  • Element-caching
    Element-caching tager et enkelt element og genererer den færdige HTML-kode.
  • Side-caching
    Side-caching fungerer ligesom element-caching, men renderer hele siden.

Hvor skal cachen gemmes
Der er grundlæggende tre steder at opbevare den genererede cache:

  • Application-variable
    I ASP og JSP har man mulighed for at definere applikations-variable. Det er variable, hvis rækkevidde (scope) går ud over alle forespørgsler. Der er altså kun én variabel for den pågældende applikation (website), så der skal ikke instantieres en ny version af variablen for hver enkel forespørgsel. Applikations-variable er velegnede til caching af ofte viste sider som for eksempel websitets forside. I PHP tilbyder funktionerne shm_put_var() og shm_get_var() samme muligheder, men fungerer i parentes bemærket kun under Unix (og Linux). Applikations-variable er hurtigere end de andre måder der er beskrevet her, men man kan selvfølgelig ikke gemme alle siderne på webstedet.
  • Database-felter
    Et andet sted at gemme det cachede indhold er i databasen. Hvis der ligger en stor mængde processering bag hver enkel side, kan indholdet gemmes i en tabel. Denne metode er velegnet til sider, der ikke vises så ofte.
  • Flade filer
    Den sidste mulighed er flade filer. Hvis siderne ikke indeholder egentligt dynamisk indhold som bannere eller andet, fås den bedste ydelse ved simpelthen at generere HTML-sider.

I den næste artikel om server-side cache ser vi på, hvorledes principperne implementeres, og kigger på konkrete kodeeksempler.

Forskellige slags cache

Der er flere slags måder at cache webindhold på, og de er principielt forskellige.

  • Klient-cache
    Stort set alle web-browsere benytter cache. Når en webside besøges, gemmer browseren en kopi af siden på computerens harddisk. Herfra kan websiden hentes igen, når der er bud efter den. Efter et vist interval vil browseren dog hente siden igen fra webstedet, således at man altid får den senest opdaterede version. Problemet her er, at de fleste større websteder har dynamisk indhold som for eksempel reklamebannere, og dermed skal siderne opfriskes hele tiden.

    Webserveren styrer, hvor lang tid der går, før at siden når "sidste salgsdato". Dette gøres ved at sætte en række header-felter i HTTP-svaret til browseren.

  • Proxy
    En proxy-server udfører samme funktion som den lokale cache, men er implementeret som en server, således at mange brugere kan benytte den samme cache. Jo tættere på brugeren proxyen er placeret, jo mere netværkstrafik spares der. En internetudbyder kan således opsætte en proxy-server for at spare på trafikken videre på netværket, men proxy-server kan også bruges internt i virksomheden eller organisationen, og det kan faktisk give væsentlige besparelser.

  • Omvendt proxy
    Omvendt proxy (reverse proxy) benyttes i den anden ende, det vil sige umiddelbart efter serveren, der egentlig leverer eller genererer indhold. Hvis en webtjeneste for eksempel fungerer som front-end for en database, kan en omvendt proxy gemme de sider, som brugerne oftest forespørger. Der kan også være en sikkerhedsmæssig fordel i at benytte omvendt proxy. Ligesom i de andre typer af proxy, må siderne opdateres, når indholdet ændrer sig.

    Princippet i omvendt proxy.

  • Server-side caching
    Server-side caching, emnet for denne artikel, går ud på, at cache direkte i de scripts eller den kode, som genererer webstedet. Den store fordel her, er at man kan tage højde for dynamisk indhold, da man kan sætte websiden sammen af mindre bidder. Hvis for eksempel en forside kun ændrer sig få gange i løbet af en dag, men skal indeholde en bannerslynge, som viser et nyt banner ved hver forespørgsel, kan den del af siden, som kun ændrer sig med længere intervaller gemmes. Dermed er det kun den del af koden, som generer banneret, der skal opdateres dynamisk.

Læses lige nu

    Capgemini Danmark A/S

    Salesforce CTO - Nordics (Denmark)

    Københavnsområdet

    Politiets Efterretningstjeneste

    SOC-analytikere i PET

    Københavnsområdet

    TV2

    Android App Developer til TV 2

    Københavnsområdet

    Styrelsen for Danmarks Fængsler

    Løsningsarkitekt søges til fortsat digitalisering af Danmarks Fængsler

    Københavnsområdet

    Computerworld Events

    Vi samler hvert år mere end 6.000 deltagere på mere end 70 events for it-professionelle.

    Ekspertindsigt – Lyt til førende specialister og virksomheder, der deler viden om den nyeste teknologi og de bedste løsninger.
    Netværk – Mød beslutningstagere, kolleger og samarbejdspartnere på tværs af brancher.
    Praktisk viden – Få konkrete cases, værktøjer og inspiration, som du kan tage direkte med hjem i organisationen.
    Aktuelle tendenser – Bliv opdateret på de vigtigste dagsordener inden for cloud, sikkerhed, data, AI og digital forretning.

    It-løsninger | Nordhavn

    SAP Excellence Day 2026

    Få konkrete erfaringer med S/4HANA, automatisering og AI i praksis. Hør hvordan danske virksomheder realiserer gevinster og etablerer effektive SAP-løsninger. Vælg fysisk deltagelse hos SAP eller deltag digitalt.

    Infrastruktur | København

    Datacenterstrategi 2026

    Denne konference bidrager med viden om, hvordan du balancerer cloud, on-premise og hybrid infrastruktur med fokus på kontrol, compliance og forretning.

    Sikkerhed | Aarhus C

    Identity Festival 2026 - Aarhus

    Er du klar til en dag, der udfordrer din forståelse af, hvad Identity & Access Management kan gøre for din organisation? En dag fyldt med indsigt, inspiration og løsninger, der sætter kursen for, hvordan vi arbejder med IAM i de kommende år.

    Se alle vores events inden for it

    Navnenyt fra it-Danmark

    netIP har pr. 1. januar 2026 ansat Michael Kjøgx som Systemkonsulent ved netIP's kontor i Esbjerg. Han kommer fra en stilling som Konsulent hos Blue Byte og før da ATEA og XPconsult. Nyt job
    Idura har pr. 5. januar 2026 ansat Arjuna Enait, 34 år,  som software engineer. Han skal især beskæftige sig med videreudvikling af Verify-systemet samt arbejde på implementeringen af CIBA i Norsk BankID. Han kommer fra en stilling som software engineer hos Lasso X. Han er uddannet civilingeniør med speciale i geoteknik. Han har tidligere beskæftiget sig med at bygge microservices til dataindsamling og -processering, samt opdatere legacy-systemer. Nyt job

    Arjuna Enait

    Idura

    Adeno K/S har pr. 2. februar 2026 ansat Rikke Badsberg som ServiceNow Specialist. Hun kommer fra en stilling som ServiceNow administrator and developer hos Kamstrup. Nyt job

    Rikke Badsberg

    Adeno K/S