De batchrun over de bestaande mediabibliotheek uitvoeren
Wat de doorloop doet — en wat vooraf ingeschakeld moet zijn
De twee afbeeldingsmodules van Kakapo Performance werken op het moment waarop WordPress de afbeeldingsgroottes aanmaakt: de compressie stelt de kwaliteit in en verwijdert EXIF-, IPTC- en XMP-markeringen uit de aangemaakte groottes, de formaatmodule maakt de WebP- en AVIF-afgeleiden aan. Beide werken daarmee vanaf de volgende upload. Voor afbeeldingen die al in de mediabibliotheek staan, gebeurt er niets — en precies dat gat dicht de stapeldoorloop.
De batchverwerking verzint geen werk. Ze past op de bestaande bestanden precies dat toe wat je hierboven voor nieuwe uploads hebt ingeschakeld: WebP en/of AVIF, en ‘Metadata verwijderen’. Staat daarvan niets aan, dan is de startknop geblokkeerd en noemt hij de reden — bijvoorbeeld dat de server geen WebP kan schrijven of dat er simpelweg geen instelling actief is. De kaart ‘Bestaande mediabibliotheek nabewerken’ vind je in het onderdeel ‘Afbeeldingen’ onder de afbeeldingsinstellingen; de volgorde in de interface komt overeen met de volgorde van bediening: eerst instellen, dan over de bestaande bestanden laten lopen.
Aangeraakt worden uitsluitend bijlagen van het type JPEG en PNG die niet in de prullenbak liggen. De regel ‘JPEG-/PNG-afbeeldingen in de mediabibliotheek’ noemt je het aantal voordat je start.
Starten, toekijken, pauzeren
Een klik op ‘Batchverwerking starten’ maakt de verwerking aan en begint meteen. Het werk gebeurt in rondes met een tijdsbudget van 8 seconden; daarna meldt de ronde terug, de weergave wordt bijgewerkt en de volgende start na 200 milliseconden. Blijft er aan het eind van een ronde minder dan 3,5 seconde over, dan wordt er geen nieuwe bijlage meer begonnen — de formaatmodule rekent intern met minstens drie seconden per afbeelding. Op servers met een ingestelde max_execution_time wordt het budget bovendien afgetopt op 80 procent van die grens, zodat de ronde niet midden in het request wordt afgekapt.
De balk toont echte voortgang: het aantal afgehandelde bijlagen gedeeld door het totale aantal. Daaronder staan de lopende cijfers — aangemaakte en overgeslagen afgeleiden, telkens één regel voor WebP en AVIF, plus opgeschoonde bestanden en vrijgekomen bytes. Helemaal onderaan lopen de laatste 14 logregels mee, telkens met de bestandsnaam en met wat er bij dat bestand uit is gekomen.
‘Pauzeren’ stopt de doorloop. De knop heet daarna ‘Hervatten’, en de volgende start gaat precies verder bij de bijlage waarbij hij bleef staan. Hetzelfde gebeurt als je het tabblad gewoon sluit: de doorloop stopt, er gaat niets verloren. Open je de pagina weer, dan vraagt ze de toestand op en drijft een nog openstaande doorloop vanzelf verder.
Hoe de doorloop een afbreking doorstaat
De stand wordt vóór het werk aan elke afzonderlijke bijlage opgeslagen, niet pas erna. Sterft een ronde middenin — uitvoeringsgrens van de webserver, werkgeheugen, een bestand waarin GD zich verslikt —, dan weet de volgende ronde waar het haperde. Blijft dezelfde bijlage drie pogingen lang zonder enige voortgang, dan wordt hij met een regel in gewone taal in het log overgeslagen, in plaats van de doorloop blijvend aan één bestand vast te houden.
Twee tegelijk geopende beheerpagina’s kunnen elkaar niet in de weg zitten: een blokkering laat altijd maar één ronde toe. Wordt een ronde door de webserver afgeschoten en blijft de blokkering liggen, dan geldt ze na 180 seconden als verweesd en wordt ze overgenomen.
Bij het hervatten wordt het totale aantal opnieuw bepaald in plaats van bevroren — tussen pauzeren en hervatten kan er geüpload of verwijderd zijn. Schakel je midden in de doorloop alle afbeeldingsinstellingen uit, dan stopt hij zichzelf, in plaats van werk te doen dat niemand meer heeft opgedragen. ‘Terugzetten’ verwerpt voortgang en rapport; de al aangemaakte bestanden blijven staan.
Het rapport goed lezen
Aan het eind staat een slotregel met gemeten bestandsgroottes — geen schattingen. Voor elke aangemaakte afgeleide vergelijkt de doorloop de grootte van het bronbestand met de grootte van het resultaat, beide echte waarden uit het moment van aanmaken. Geteld wordt alleen wat in deze doorloop nieuw is ontstaan; wat al bij de upload is omgezet, duikt niet nog een keer op.
Drie dingen staan daar bewust zo en niet mooier: WebP en AVIF krijgen aparte regels, omdat bij hetzelfde bronbestand twee keer een afgeleide ontstaat — een gezamenlijke som zou het bronbestand dubbel tellen. De percentages gelden daarom per regel en mogen niet bij elkaar worden opgeteld; een browser haalt altijd maar één van de twee formaten op. En de nieuwe bestanden nemen extra ruimte in op de harde schijf: er wordt bespaard bij de overdracht naar de bezoeker. Echt schijfruimte vrijmaken doet alleen het verwijderen van de metagegevens, en die bytes staan in een eigen regel.
Is er niets aangemaakt, dan zegt het rapport dat ook: ofwel was voor de hele mediabibliotheek al alles gedaan, ofwel was geen enkel resultaat kleiner dan zijn bronbestand. Een resultaat dat niet kleiner is, wordt verworpen en als ‘overgeslagen’ geteld — nooit als winst.
Als er iets wordt overgeslagen
Elke niet aangemaakte afgeleide krijgt een reden in gewone taal, en de redenen staan gebundeld in de slotregel:
• ‘niet kleiner dan het bronbestand’ — normaal, het bronbestand blijft staan. • ‘te groot voor het beschikbare werkgeheugen’ — de formaatmodule controleert de afmetingen van de afbeelding vóór het decoderen en weigert, in plaats van PHP tegen de geheugenlimiet aan te laten lopen. • ‘op de doellocatie lag al een bestand’ — dat wordt niet overschreven. Dat gebeurt meestal wanneer de notitie bij de bijlage verloren is gegaan, maar de bestanden er nog staan. • ‘niet leesbaar’ — defect, CMYK-JPEG of een exotische variant. • ‘niet schrijfbaar’ — controleer de rechten in de uploadsmap. • ‘formaat op deze server niet beschikbaar’ — AVIF vereist PHP 8.1 of nieuwer met libavif, WebP een GD-bibliotheek met libwebp.
Twee dingen die vaak voor fouten worden aangezien, maar dat niet zijn: een tweede doorloop laat nauwelijks nog beweging zien, omdat wat af is niet wordt herhaald — een markering bij de bijlage houdt bij voor hoeveel bestanden het verwijderen van de metagegevens al gedaan is. En wie een kwaliteitsniveau wijzigt, vernieuwt daarmee geen al aangemaakt bestand; daarvoor zouden de afgeleiden eerst weg moeten.