Dansk hosting fra Aalborg
100% CO₂-neutral hosting
24/7/365 dansk support
support@hostious.io
● Hostious viden · artikel

Høj TTFB i WordPress: cache, PHP, database eller origin?

Skrevet af , stifter af Hostious · Udgivet 28. august 2026 · Opdateret 30. august 2026
Høj TTFB i WordPress: cache, PHP, database eller origin?

Kort svar: Test samme anonyme URL flere gange og gem TTFB, cacheheader og tidspunkt. Hvis første request er langsom og de næste er hurtige, er cacheopvarmning central. Hvis både cachede og uncached requests er langsomme, skal proxy, netværk og origin undersøges. Er kun uncached eller indloggede requests langsomme, skal du måle PHP-, database- og pluginarbejde. Hæv ikke servergrænser, før laget er dokumenteret.

TTFB – Time to First Byte – måler tiden fra requesten starter, til browseren modtager den første byte af svaret. Den omfatter derfor ikke kun WordPress. DNS, forbindelse, TLS, proxy, edge-cache, webserver, PHP og database kan alle bidrage.

En enkelt TTFB-værdi fortæller ikke, hvilket led der er langsomt. Denne guide bruger en kontrolleret række af requests til at skelne cachelevering fra origin-generering.

Afgrænsning: Fremgangsmåden er revideret den 28. august 2026 med WordPress 7.1, PHP 8.4.23, FlyingPress 5.6.5 og Chrome 151 som versionskontekst. Tidsværdierne i dine egne sager skal komme fra den konkrete URL og mærkes med region, protokol, cachetilstand og tidspunkt; guiden indeholder ikke et skjult benchmark af Hostious' produktion.

Først: gør målingen sammenlignelig

Vælg én offentlig URL og notér:

  • præcis URL og redirectkæde;
  • tidspunkt og testregion;
  • browser eller kommandolinjeværktøj;
  • DNS/TLS-forhold, hvis værktøjet viser dem;
  • om requesten er anonym eller indlogget;
  • cookie- og querystring-status;
  • om cachen er kold, varm eller bypasset.

Mål mindst fem gange under samme forhold. Gem rå output, ikke kun gennemsnittet. Hvis den første request er markant langsommere, er det netop en del af diagnosen.

Kontrolleret langsom HTML-respons i et WordPress-testmiljø
Syntetisk cirka fire sekunders ventetid i WordPress 7.1, testet 28. august 2026 på isoleret staging. Timingillustration; billedet isolerer ikke TTFB og beviser ingen WordPress-flaskehals.

Byg en lille requestserie, som kan læses bagefter

En anvendelig måling bør kunne gennemgås af en anden person uden forklaring ved siden af. Nummerér requests fra 1 til 6. Brug den første som bevidst kold request, hvis du har purget test-URL'en, og markér de næste fem som varme. For hver række gemmer du starttid, HTTP-status, samlet tid, TTFB, cacheheader og en kort body-kontrol, eksempelvis sidens titel eller en hash af HTML'en.

Body-kontrollen forhindrer en klassisk fejl: at en meget hurtig respons viser en sikkerhedsside, en tom fejlskabelon eller gammelt indhold. Hvis status er 200, men titel og canonical ikke svarer til den ønskede side, må målingen ikke tælle som en succes.

Brug medianen af de varme requests som sammenligning, og behold samtidig højeste og laveste værdi. En serie på 180, 190, 195, 205 og 900 millisekunder fortæller noget andet end fem målinger tæt omkring 334 millisekunder, selv om gennemsnittet kan ende i samme område. Den enkelte spids kræver korrelation med log og ressourcegraf; den stabile forsinkelse peger på en vedvarende del af kæden.

Mål ikke fra en browser med en aktiv administratorsession, når den offentlige cache skal vurderes. Admincookies kan give BYPASS og sende requesten gennem WordPress, selv om almindelige besøgende får et cachet svar.

Trin 1: Fjern redirects fra testen

Test den endelige canonicale HTTPS-URL direkte. En kæde fra HTTP til HTTPS, fra www til ikke-www og videre til en ny slug tilføjer tid, før den rigtige side overhovedet bliver bedt om.

Gem hver status og Location-header. Ret interne links til den endelige URL ved kilden, hvis de går gennem unødvendige redirects. Fjern ikke en nødvendig historisk redirect uden at kende dens trafik og backlinks.

Trin 2: Sammenlign kold og varm cache

Kør først en anonym request efter en kontrolleret purge af kun test-URL'en, hvis systemet tillader det. Kør derefter flere identiske requests.

ResultatTolkningNæste undersøgelse
Første langsom, næste hurtige og dokumenteret HITPage cache virker, men kold generering er dyrOrigin/PHP samt preloadstrategi
Alle langsomme og dokumenteret MISS/BYPASSCachen bruges ikke for denne requestCookies, querystrings, regler og URL-type
Alle langsomme trods dokumenteret HITTid kan ligge før/omkring cachelagetEdge, proxy, netværk, cachelager og geografi
Anonyme hurtige, indloggede langsommePage cache skjuler en langsom WordPress-requestPHP, database, adminhooks og personlige funktioner
Kun én skabelon langsomSkabelonspecifikt arbejdeQueries, builder, widgets og eksterne kald

Brug cacheheaderen eller et andet dokumenteret bevis fra den aktuelle stack. Gæt ikke ud fra pluginets aktive status.

Trin 3: Mål origin uden at ændre DNS

Hvis et CDN eller en proxy ligger foran, skal du skelne edge fra origin. Brug hostingens eller proxyens understøttede diagnostik, fx et origin-testendpoint eller en sikker hosts-mapping i et kontrolleret miljø. Del ikke origin-IP offentligt.

Sammenlign:

  • samme URL via normal offentlig vej;
  • samme Host-header direkte mod origin, hvis det er godkendt og sikkert;
  • cachet og uncached respons;
  • samme region og tidspunkt.

Hvis origin er hurtig, men den offentlige vej er langsom, skal proxy-, edge- eller netværkslaget undersøges. Hvis origin også er langsom, går du videre til WordPress/PHP.

Trin 4: Del serverens tid op

Server-Timing-headere kan gøre underdele synlige, hvis platformen eller applikationen måler dem. En profileringsløsning på staging kan desuden vise tid i hooks, databasequeries og eksterne HTTP-kald.

Start med tidskorrelation:

  1. Send én testrequest og notér sekundet.
  2. Find samme request i accessloggen via sti, request-id eller tidspunkt.
  3. Sammenhold total requesttid med PHP- og databasebevis.
  4. Gentag tre gange for at se mønsteret.

Hvis accessloggen viser lang upstreamtid, men PHP-profilen ikke gør, kan kø, workerstart eller et andet originled være involveret. Hvis én hook eller query dominerer hver gang, har du en afgrænset kandidat.

Trin 5: Undersøg PHP og plugins sikkert

På staging med samme data og plugins:

  • kontroller PHP fatal errors og warnings omkring requesten;
  • se om langsomme eksterne API-kald ligger i den synkrone request;
  • profiler tema- og pluginhooks;
  • gentag med den ene mistænkte funktion deaktiveret;
  • brug samme URL og cachebypass ved før/efter.

Antallet af plugins er ikke bevis. En enkel pluginliste kan stadig indeholde et dyrt kald, og mange veldesignede plugins kan have minimal effekt på en bestemt route.

Trin 6: Undersøg databasen med en konkret query

Se efter queries, der gentages, scanner mange rækker, venter på låse eller bliver genereret af den samme skabelon. Persistent object cache kan reducere nogle gentagne opslag, men den løser ikke en langsom query eller et eksternt API-kald automatisk.

Kontrollér også autoloadede options, hvis profilen viser tid eller volumen dér. Slet ikke options efter størrelse alene. Identificér ejer, læsemønster og konsekvens, og brug pluginets dokumenterede oprydning eller en backupbaseret ændring.

Trin 7: Se på ressourcer og samtidighed

En request kan være hurtig alene og langsom under kø. Sammenhold TTFB-spidser med:

  • CPU, RAM og disk-I/O;
  • PHP-worker-kø og genstarter;
  • databaseforbindelser eller locks;
  • cron, backup, malware-/SEO-scan og imports;
  • trafikmængde og cachepurges.

En fuld purge efterfulgt af aggressiv preload kan skabe en bølge af uncached PHP-requests. Hvis origin allerede er presset, skal preloadens concurrency ikke hæves som første løsning.

Hvad retter du først?

Vælg den mindste ændring, som passer til beviset:

  • unødvendig redirect: ret interne URL'er og behold nødvendig historisk redirect;
  • cachebypass fra forkert cookie eller querystring: afgræns reglen;
  • langsom pluginhook: opdatér, omkonfigurér eller erstat den dokumenterede funktion;
  • langsom query: ret query eller dataadgang, ikke hele databasen;
  • synkront eksternt kald: cache, flyt eller gør det asynkront, hvis funktionen tillader det;
  • worker-kø: fjern årsagen eller justér kapacitet med hosting på baggrund af måling.

To illustrative forløb – og hvorfor de ender forskelligt

Tallene her er regneeksempler, ikke resultater fra et aktivt website.

Forløb A: dyr kold side, stabil varm cache

Den kolde request bruger 1.400 millisekunder, mens fem varme requests ligger mellem 120 og 155 millisekunder og viser det forventede HIT. Det beviser ikke, at alt er godt, men det afgrænser problemet. Hvis en fuld purge eller udløb sker ofte, vil mange brugere ramme den dyre generering. Næste kontrol er derfor den uncached PHP-/databaseprofil og årsagen til hyppige purges – ikke et nyt frontendplugin.

Før: en bestemt skabelon bruger en langsom query på alle kolde requests. Efter en målrettet rettelse skal den kolde serie falde, mens den varme cache stadig viser korrekt, aktuelt indhold. Kontrollér også, at purge ved redigering stadig invaliderer den rigtige side.

Forløb B: dokumenteret HIT er stadig langsomt

Alle seks requests ligger omkring 800 millisekunder, selv om cacheheaderen viser HIT, og body er korrekt. Her vil en databaseoprydning sandsynligvis ikke påvirke den målte vej, fordi WordPress-genereringen allerede er sprunget over. Sammenlign regioner, proxy-/edge-timing, cachelager og forbindelsesopbygning. Hvis direkte, godkendt originmåling er hurtig, men den offentlige vej er langsom, skal sagen sendes til det lag, som faktisk tilføjer tiden.

I begge forløb er beslutningen baseret på forskellen mellem cachetilstande. Det er mere værd end at sammenligne én tilfældig PageSpeed-kørsel før og efter.

Funktionskontrol efter en TTFB-rettelse

En hurtigere HTML-respons må ikke skyldes, at personligt eller nyt indhold bliver genbrugt forkert. Test derfor mindst:

  • en anonym artikel efter en synlig stagingændring og efter purge;
  • en ny privat session uden gamle cookies;
  • en indlogget side, som forventet skal omgå fælles page cache;
  • formularens validering og succesrespons;
  • to adskilte kurve, hvis sitet bruger WooCommerce;
  • canonical, robots og den endelige URL efter eventuelle redirectrettelser.

Hvis den varme TTFB falder, men en anden session ser den forkerte kurv eller en gammel pris, er rettelsen forkastet. Ydelse godkendes først sammen med korrekt indhold.

Verifikation

Gentag hele requestserien efter ændringen:

  1. samme URL, region og protokol;
  2. én dokumenteret kold request;
  3. mindst fem varme requests;
  4. cacheheader og response body;
  5. relevant anonym og indlogget funktion;
  6. serverlog/profil uden den tidligere flaskehals.

Rapportér median, spredning og cachetilstand. “Bedste kørsel” er ikke en stabil forbedring. Kontrollér også LCP; lavere TTFB bør ikke være købt med forældet indhold eller ødelagt personalisering.

Rollback og eskalering

Hvis ændringen ikke giver en reproducerbar gevinst, gendan den præcise før-værdi og purge kun det relevante lag. Genindsæt ikke slettede data manuelt, hvis en databasebackup er den sikre rollback.

Kontakt hosting med URL, tidspunkt, cachetilstand, request-id, accesslogtid og ressourcegraf, når problemet ligger i webserver, PHP-pool, databaseinfrastruktur eller disk. Kontakt pluginudvikleren med en minimal stagingreproduktion, når én komponent konsekvent dominerer requesten. Hostious WordPress-support kan samle beviserne.

Sådan dokumenterer du din egen TTFB-sag

  1. Tegn tidslinjen fra forbindelse til proxy, cache, webserver, PHP og database, og marker hvor dit bevis stopper.
  2. Vis hele requestserien til samme URL med kold/varm markering og body-kontrol.
  3. Gem de relevante response headers med cookie-, IP- og serverdetaljer anonymiseret.
  4. Kobl accesslog og profileringsspor via tidspunkt eller request-id.
  5. Beskær ressourcegrafen til samme tidsvindue, så en belastningsspids kan sammenholdes med requesten.

Gem rå timing-output, headers, redirectkæde, request-id, accesslogvarighed og et profileringsudtræk. Brug filnavne med dato, URL-type og cachetilstand, og fjern cookies, tokens, IP'er og kundedata før materialet deles.

Ofte stillede spørgsmål om TTFB

Hvad er en god TTFB for en WordPress-side?

Under 200 ms på cachede sider og under 600 ms på ucachede er solidt. Over 1 sekund konsekvent betyder, at origin arbejder for hårdt – eller at requesten slet ikke rammer cachen.

Hvorfor er første besøg langsomt og resten hurtige?

Klassisk koldt cache-mønster: første request genererer siden, de næste får den fra cache. Løsningen er preload/crawler, så cachen er varm, før besøgende kommer – ikke en større server.

Hvordan måler jeg, om det er PHP eller databasen, der er langsom?

Mål en ucachet side og se serverens timing-logs: lang PHP-tid med hurtige queries peger på kode/plugins; langsomme enkeltqueries peger på databasen. Gæt aldrig – begge dele kan måles direkte.

Læs også