Skip to main content Spring til indhold

Langsom WooCommerce-admin: find årsagen og ret den

En langsom WooCommerce-admin skyldes typisk én af fire ting: ordredata, der ligger i en tabel, som ikke er bygget til det, forespørgsler, som admin selv sender i baggrunden, plugins, der henter data fra andre servere, mens siden bygges, eller baggrundsjob, der kører, når du klikker. Admin bliver aldrig cachet, så alt det mærkes direkte.

Her gennemgår vi, hvordan du finder ud af, hvilken af dem det er, og hvad du gør ved den. Er det også butikken, kunderne ser, der er langsom, så start med vores guide til fejlfinding af en langsom WooCommerce-webshop.

Hvilken del af admin er langsom?

Start med at notere, hvilke skærme det gælder. Det afgrænser årsagen hurtigere end noget værktøj.

Langsom skærmTypisk årsag
Ordrelisten og ordresøgningOrdrer i wp_postmeta i stedet for HPOS, eller et plugin, der tilføjer kolonner med egne forespørgsler
Produktlisten og produktredigeringMange varianter, plugins med ekstra felter og kolonner, eksterne kald ved hver indlæsning
KontrolpaneletWidgets med salgstal og statistik, nyheder og forslag hentet udefra
Alle skærme, også de enklesteEksterne kald fra plugins, baggrundsjob eller serveren selv
Det går i stå, mens du arbejderHeartbeat og andre admin-ajax-forespørgsler, især med flere brugere logget ind

Find årsagen med Query Monitor

Query Monitor er det værktøj, der svarer hurtigst. Installér det, helst på en kopi af shoppen, og åbn den langsomme skærm. I admin-bjælken står sidens samlede tid, hukommelse og antal databaseforespørgsler. Klik på det, og se især tre paneler.

Queries by Component fordeler databasetiden på WordPress, WooCommerce, temaet og hvert plugin. Står ét plugin for en stor del, har du din første mistænkte. Slow Queries viser de enkelte forespørgsler, der tog længst tid, og hvilken funktion der kaldte dem. HTTP API Calls viser de kald, siden har lavet til andre servere, mens den blev bygget, med tid og adresse. Det panel bliver ofte overset, og når alle admin-skærme er langsomme, kan svaret stå der.

Query Monitor ser kun den side, du indlæser. Forespørgsler, som admin sender bagefter, ser du i browserens udviklerværktøjer (F12) under Network. Filtrér på admin-ajax, og lad siden stå åben et par minutter.

Ordrelisten: HPOS og søgning

Er det ordrelisten, der er langsom, så tjek først, hvordan shoppen gemmer ordrer. I ældre shops ligger ordrer som indlæg i wp_posts, og alle deres felter som rækker i wp_postmeta. Listen, filtrene og søgningen skal så finde frem til ordrerne gennem en tabel, der også rummer alt andet på siden. Med mange ordrer bliver det langsomt, og søgning efter navn eller e-mail kan tage flere sekunder.

High-Performance Order Storage (HPOS) gemmer ordrer i egne tabeller med kolonner og indekser til netop de opslag. Det er standard i nye shops siden WooCommerce 8.2 (på engelsk), men ældre shops kører stadig den gamle lagring, indtil nogen skifter. Du ser, hvad din shop bruger, under WooCommerce → Indstillinger → Avanceret → Funktioner. Før du skifter, skal alle plugins, der læser eller skriver ordrer, være kompatible, og ordrerne skal synkroniseres til de nye tabeller. WooCommerce viser selv inkompatible plugins på samme side. Hvad HPOS er, og hvad der bliver hurtigere, gennemgår vi i guiden om HPOS.

Kører shoppen allerede HPOS, og er listen stadig langsom, så se efter plugins, der tilføjer kolonner til ordrelisten, for eksempel med fragt-, betalings- eller regnskabsstatus. Hver kolonne kan betyde en ekstra forespørgsel pr. ordre på siden.

Heartbeat og admin-ajax

Så længe en admin-side står åben, sender WordPress’ Heartbeat API en forespørgsel til admin-ajax.php med faste mellemrum. Ifølge WordPress’ egen dokumentation er det hvert 15. sekund i editoren og hvert 60. sekund på andre admin-sider. Det bruges til autogem, til at låse et indlæg, som en anden redigerer, og til at holde dig logget ind. Plugins kan hænge deres egne opgaver på det samme kald.

Hver af de forespørgsler starter hele WordPress og alle plugins. Med én bruger er det sjældent et problem. Med flere medarbejdere, der har admin åben i flere faner hele dagen, bliver det mange forespørgsler, der ikke kan caches, og de deler serveren med dine kunder. Tager et enkelt admin-ajax-kald lang tid i fanen Network, så åbn det og se under Payload, hvilken action det er. Det fortæller, hvilket plugin der står bag.

Du kan sætte intervallet op på admin-sider uden for editoren med et plugin som Heartbeat Control. Slå det ikke helt fra i editoren: så mister du autogem og advarslen om, at en anden redigerer samme produkt eller ordre.

Plugins, der henter data fra andre servere

Mange plugins tjekker licenser, opdateringer, nyheder eller tilbud hos deres udvikler. Gør de det, mens admin-siden bygges, venter siden på svaret. Er den anden server langsom eller nede, kan hver admin-side tage flere sekunder, også selvom intet er galt på din egen server. Panelet HTTP API Calls i Query Monitor viser hvert kald, hvor lang tid det tog, og hvilket plugin der lavede det.

Løsningen afhænger af pluginnet. Nogle har en indstilling til at slå forslag og nyheder fra. WooCommerce selv har en indstilling under WooCommerce → Indstillinger → Avanceret → WooCommerce.com, hvor du kan slå forslag fra markedspladsen fra. For andre er det et spørgsmål om at opdatere pluginnet eller skifte det ud. Hvordan du finder det plugin, der koster tid, står i guiden om plugins og hastighed.

Kontrolpanelet og statistik

Kontrolpanelet er den første side, du ser, og den er tit fyldt med widgets, der regner salgstal ud eller henter nyheder ved hver indlæsning. Skjul dem, du ikke bruger, under Skærmindstillinger øverst på siden. Det gælder for din egen bruger, så hver medarbejder skal gøre det selv.

WooCommerce Analytics bygger sine rapporter på egne tabeller, som opdateres i baggrunden, når der kommer ordrer. Første gang, eller efter en import af gamle data, kan det give meget arbejde i køen af planlagte handlinger. Det er forbigående, men det kan gøre admin langsom, mens det står på.

Baggrundsjob, der kører, når du klikker

WP-Cron og WooCommerce’s kø af planlagte handlinger, Action Scheduler, bliver som standard sat i gang af besøg på siden, og admin-sider tæller med. Er køen lang, eller fejler de samme job igen og igen, kan det gøre dine klik langsomme. Kig under WooCommerce → Status → Planlagte handlinger efter mange ventende eller fejlede handlinger, og få din hostingudbyder til at køre WP-Cron fra serveren på et fast interval. Hvordan du rydder op i køen, står i guiden om Action Scheduler. Hvorfor det betyder noget for hele shoppen, står i afsnittet om baggrundsjob i fejlfindingsguiden.

Serveren

Admin kan ikke caches som en side, men databaseforespørgsler kan. En object cache som Redis gemmer resultaterne mellem sidevisninger og kan hjælpe admin meget. Hvordan databasen bliver hurtig i det hele taget, står i guiden om WordPress-databasen. Er alt rettet, og admin stadig langsom, især når der er travlt i butikken, så deler admin og kunder måske bare for få PHP-processer.

Ofte stillede spørgsmål

Kan jeg bare slette gamle ordrer?

Ikke uden videre. Efter bogføringsloven skal regnskabsmateriale opbevares i 5 år fra udgangen af det regnskabsår, det vedrører. Er ordrerne i WooCommerce dit eneste spor af salget, skal de gemmes. Ligger fakturaerne i dit regnskabssystem, kan gamle ordrer arkiveres, men tal med din revisor først. Det er i øvrigt sjældent antallet af ordrer i sig selv, der er problemet, men hvordan de er gemt.

Er det farligt at slå Heartbeat fra?

Helt fra i editoren, ja: du mister autogem og advarslen, når to redigerer det samme. På de andre admin-sider kan du roligt sætte intervallet op.

Vil du have hjælp?

En langsom admin koster tid hver dag for dem, der pakker ordrer og retter produkter. Vil du have, at vi finder årsagen, så læs om optimering af en langsom WooCommerce-shop. Vi kigger gratis på din shop først og siger, hvad der skal til.

← Alle indlæg

Lad os høre mere om dig

Er din webshop langsom, ustabil eller bare svær at arbejde med? Skriv et par linjer, så får du en ærlig vurdering direkte fra udvikleren.