Vad som hände när sajten med WP 3.1 MS blev segare än sirap

Satt och dundrade upp en ny version av Värnamo.nu här i dagarna vilken i framtiden ska husera på WordPress 3.1 med Multisite aktiverat. Problemen kom fortare än kvickt – sidan blev segare än sirap på liveservern. Eftersom allt fungerade hur bra som helst internt så är det en av två saker som är problemet: tilläggen har problem eller att webbhotellet är segt (körs på Surftown).

Tänkte dokumentera lite hur jag går till väga och vad jag gjort för framtida behov.

Eftersom jag vet att webbhotellet inte är den snabbaste eller skarpaste kniven som finns tillgänglig (plockade bort safe_mode för några månader sedan först, vilket skadade min tillit rejält) och att webbplatsen drar mer än den vanliga sidan i resurser så hoppade jag direkt på pluginlistan då den går snabbast att optimera.

Det visar sig ganska snart att WP Super Cache strulade rejält. Webbplatsen tjänade till och med in cirka 20 sekunder (!) om tillägget inaktiverades, även med olika konfigurationer för varje test (testade “allt”, från minimal cache till varianter av tuff cache). Lösningen blev att, till slut efter jag gett upp, köra in W3 Total Cache istället vilket flyter på bra än så länge även om det finns en del kvar att göra. Det enda som saknas är att kunna aktivera det globalt över alla sajter och jag är inte säker på om inställningarna måste kopieras till nästa sajt än.

WordPress SEO lägger också på ett par sekunder i administrationsläget. Detta är lite skitsamma, All in one SEO fick ta dess plats kvickt.

Tillägg som också åkte var WP-polls (strular i vilket fall en del), Redirection (hur kan det gå så fel med en simpel uppgradering?) och mitt egna slideshow-tillägg som fick ge plats till en optimerad, snabbare variant som är baserad på en enkel shortcode och inte ett plugin.

Lite övriga saker som tyngde ner servern

  • Custom Post Types, Hiererical => true verkar ta längre tid än false i adminläget
  • Plocka bort adminbar tjänar också in ett par sekunder
  • Ladda in så mycket som möjligt i footer.php, fungerar dock inte alltid
  • Ta bort skräp från PHP-koden. Ex. varför kolla om temat stödjer widgets när du kallar ett widgetområdet?
  • Använda async, när möjligt, när du laddar in scripts (gecko/webkit)
  • Analysera din loops så att de är optimala. Ska den visa 10 posts – så säg till den att göra det.
  • Minimera samtidigt antalet loops, vilket i sin tur minimerar antalet querys till databasen.

Optimeringen fortsätter …

Uppdaterat 1 timme senare: När jag postat detta såg jag ytterligare en stor flaskhals. Det fanns ett 100-tal inaktiva widgets. Jag gissar lite stort att Inaktiva widgets lagras i samma fält som aktiva widgets, tänk tanken att hitta ett rätt bland en stor klump av data meckat av json_decode().

  • http://triop.se/ Jonas Lejon

    Kolla även ORDER BY RAND() vilket kan slöa ner WordPress

  • Pingback: Note to self: Apache2+PHP med APC & Memcached | Webbdesign & WordPress i Sundsvall

  • http://www.angrycreative.se Jimmy Rosén

    Om du skall kunna optimera på “riktigt” måste du ha en egen dedikerad server och inte ett vanligt delat webbhotellskonto. En “riktig” optimering sker ju inte bara på temanivå, utan även på demonnivå.

    • http://cynatic.org Andreas Johansson

      En flytt till VPS blev det givetvis. Men för att få sajten att fungera hyfsat innan flytten blev klar så måste man givetvis påverka det som kan påverkas. Att grotta runt i gammal kod (gamla bibliotek, optimera svarstider etc) är något som kan lösa mer problem än vad man tror.

      • http://www.angrycreative.se Jimmy Rosén

        ryktet säger att varnish + nginx + wordpress är en het kombination!