Probleem:
Ik kreeg van een bedrijf de vraag of ik naar hun WordPress website wilde kijken. Deze was heel traag met laden. Ieder paginaverzoek duurde ongeveer 3 seconden en soms zelfs nog meer. Als mensen die websites bezoeken niet ergens hekel aan hebben dan is het wel de wachten.
De standaard stappen om overbodige plugins te verwijderen en de plugins die overblijven bij te werken naar de laatste versie loste het probleem niet op. Nog steeds had de website een WP_MEMORY_LIMIT van 256MB nodig wat best hoog is.
Oplossing:
Ik kreeg het vermoeden dat het lange laden aan een plugin lag of de database. Om daarachter te komen heb ik gebruik gemaakt van de gratis plugin Querymonitor.
Deze plugin maakt inzichtelijk welke PHP functies worden geladen, welke queries worden uitgevoerd, welke bestanden in welke volgorde worden geladen etc. Je ziet precies waar de vertraging zit.
Meer dan 50.000 records uit de database opgehaald:
Tijdens het laden van de website werd er een query uitgevoerd op de “wp_postmeta” tabel die zorgde voor meer dan 50.000 records als resultaat. Dat is enorm veel en zorgde ook voor een behoorlijke verhoging van de laadtijd. Ter informatie: de “wp_postmeta” tabel bevat extra informatie (meta informatie) van een pagina, bericht of custom post type.
Popup Builder plugin haalt die 50.000 records op:
Uit onderzoek blijkt dat bovenstaande query uitgevoerd wordt door de plugin Popup builder. Deze plugin slaat de pop-ups op als een eigen custom post type in de “wp_posts” tabel. Iedere pop-up kan ook records hebben met meta informatie die opgeslagen worden in de “wp_postmeta” tabel. Op zich niets vreemds aan.
Probleem wordt veroorzaakt door revisies of oude records:
Dankzij de Querymonitor plugin weet ik precies welke query uitgevoerd wordt. Deze kan ik zelf handmatig uitvoeren via phpMyAdmin om te zien welke records er daadwerkelijk opgehaald worden.
Blijkbaar zijn dit allemaal oude records van voorgaande keren dat de pop-ups opgeslagen zijn. Dat die in de database zitten is niet erg want zo kan je altijd nog terug in de tijd. Maar tijdens het laden van de voorpagina hoef je alleen de meest recente records op te halen.
Het valt op dat veel van die records gemaakt zijn door de WPBakery plugin die gebruikt wordt door het thema. Of de hoeveelheid records veroorzaakt worden door de Popup builder of WPBakery plugin blijft onduidelijk.
Oude records verwijderen:
Om de oude records te verwijderen heb ik gebruik gemaakt van de gratis plugin WP-Sweep. Hiermee kan je eenvoudig verouderde records uit alle WordPress databasetabellen verwijderen. Hieronder vallen ook veel van de 50.000 records.
Belangrijke tip: test de plugin eerst uit op een testomgeving of maak van tevoren een back-up van de database. Soms kan er ook teveel verwijderd worden.
Conclusie:
Na het bijwerken van de plugins, overbodige plugins verwijderen en het uitvoeren van WP-Sweep is de laadtijd van de website verlaagd van 3 naar 1 seconde.