Missnöjd med laddtiderna på din Drupal hemsida? Det var jag. Det finns en relativt enkel lösning som inte kräver mycket tid men som ger väldigt mycket bättre prestanda.
Först lite bakgrund varför Drupal kan vara så segt. Php är ett script språk som Drupal är baserat på, php är till sin natur rätt så långsam eftersom att koden för varje sida måste tolkas och behandlas av webbservern varje gång någon besöker en sida. Dessutom så ligger all information i en SQL databas, vilket betyder att för varje sida som ska skapas av webbservern så skickas många frågor till databasen vilket ökar på tiden att skapa sidan ännu mer. Drupal är tack vare alla moduler väldigt mångsidigt och du kan göra väldigt mycket. Nackdelen med många moduler är att varje modul skapar mer kod som måste behandlas och eventuellt även mer databasfrågor. Så det första steget är att minimera antalet moduler som krävs. Inaktivera alla som du inte måste ha. Om du kan lösa en sak utan att använda en modul så är det, iaf ur prestanda hänseende, oftast en fördel att undvika modulen.
När antalet moduler är minimerat men sidan ändå är för seg så finns det en relativt enkel lösning för att minska tiden drastiskt, dessutom så kommer belastningen på servern att minska. Lösningen finns i form av en modul som heter Boost. Det Boost gör är att den skapar en ren html version av alla noder och sidor. När sedan någon besöker hemsidan så kommer webbservern, istället för att behandla php-koden och alla databas frågor, att skicka html-filen. Det här kommer drastiskt att minska tiderna det tar för besökarna att kunna se hemsidan. Det här gäller dock bara sidor för annonyma besökare, så du kommer inte att märka någon skillnad när du är inloggad.
Min installation gäller för en Linux server med apache som webbserver. Därför kan vissa steg vara anorlunda om du kör med en annan plattform.
Förutom Boost så behöver vi två till moduler, Cache expiration och httprl. Tyvärr är både Boost och Cache expiration i beta versioner, vilket jag brukar undvika att använda på en produktionsmiljö. Jag har testat det här upplägget på min testsida och hittintills så har jag inte stött på några problem och jag har inte sett så många andra som har problem med dem. Därför har jag beslutat mig för att använda dem ändå.
Installation
Börja med att ladda ner modulerna och packa upp dem (tar -xvf "filnamn" i Linux). Flytta dem sedan till modules katalogen (public_html/sites/all/modules). Gå därefter till "Moduler" på din hemsida.

Leta sedan upp modulerna i listan och aktivera dem neligt nedan. Tips använd ctrl+f för att söka efter "boost" på sidan. Slutligen klickar vi på spara längst ner.

För att Bost skall fungera så måste vi se till att vi använder rena URL:er. När modulerna är aktiverade så går vi till "Konfiguration -> Sök- och metadata -> Rena URL:er"

Kontrollera att "Aktivera rena URL:er" är aktiverad och spara.

Nästa steg är att inaktivera Drupals interna cache då den inte fungerar tillsammans med Boost. Gå till "Konfiguration -> Utveckling -> Prestanda".

Här kontrollerar vi att "Cacha sidor för anonyma användare" ej är aktiverad. Om den är aktiverad så avaktiverar vi den och sparar.

Konfiguration
Dags att aktivera Boost. Gå till "Konfiguration -> System -> Boost"

Kontrollera inställningarna under fliken "Boost settings". Längst upp, under "Boost cacheability settings", kan vi välja att inte inkludera vissa sidor i cachen. För min del så väljer jag att aktivera på alla sidor.
Om någon sida inte skall ingå så skriver du sökvägen till de sidorna, en per rad i rutan. Ifall det bara är ett fåtal sidor som skall cachas så är det enklare att bocka i "Enbart på angivna sidor" och anger de sidor som skall inkluderas i rutan.

Längre ner på sidan ställer vi in vad som skall ingå i cachen. Jag väljer att bara aktivera på html sidor. Man kan även aktivera xml sidor samt Ajax/Json. Eftersom att innehållet på mina sidor inte uppdateras så ofta väljer jag att utöka tiden innan Boost skapar en ny html version av en sida till 1 dag. Om innehållet uppdateras ofta så kan det vara lämpligt att låta den stå kvar på 1 timme.
Slutligen sparar vi.

Gå till fliken "Cache expiration". Där ser vi till så att båda alternativen är markerade och spara.
"Ignore a cache flush command if cron issued the request" - Normalt så rensas Drupals cache med jämna mellanrum när Cron körs. Vi vill istället att de filer som är för gamla enligt ovanstående inställning rensas enbart när den tiden har passerats.
"Remove old cache files on cron" - När Cron körs så vill vi att gamla cache filer rensas så att de inte ligger kvar.

Så går vi till fliken "File System". Här ställer vi in var någonstans Boost skall spara html filerna som den skapar. Normalt så behöver vi inte ändra något här. Vi måste dock se till så att webbservern kan skriva till den här katalogen. För att kontrollera om webbservern har rätt rättigheter så kan man gå till "Rapporter -> Statusrapport" och kontrollera så att du inte får några felmeddelanden från Boost.
I Linux så ska katalogen ägas av din användare och gruppen för webbservern. Rättigheterna bör vara 0775.

Ändra .htaccess filen
Börja med att göra en säkerhetskopia av din .htaccess fil som ligger i webbrooten. Om det blir något fel när vi ändrar i den så är vi tacksamma om vi har skapat en kopia på den gamla som vi kan återställa. Gör vi fel så kan sidan bli oåtkomlig för dig och besökare.
När vi har gjort en säkerhetskopia går vi till fliken ".htaccess".
Standard inställningarna bör fungera bra, vi kontrollerar så att det ser rätt ut och klickar på spara om vi ändrar något. Därefter klickar vi på knappen ".htaccess generation" uppe i högra hörnet.

Vi får nu koden som vi skall lägga till i .htaccess filen. Kopiera texten och klistra in den längst ner i din .htaccess fil.

Skapa html filerna på förhand med hjälp av Crawler
Normalt skapas html filerna av Boost när någon besöker sidan. Det kan betyda att sidan ibland blir långsam, för att råda bot på det så aktiverar vi en crawler i Boost. Crawlern kommer att skapa html filerna som behövs innan någon besöker sidan vilket betyder att det altid finns en cachad html sida.
För att aktivera förhandsskapandet av html filerna går vi till fliken "Crawler". Bocka i "Enable the cron crawler" och spara. Det kommer att dröja ett tag innan alla sidorna finns sparade så därför kommer det att dröja ett tag innan vi ser förbättringen. Dock kommer sidorna som får besök att automatiskt skapas direkt när sidan visas för en besökare, så nästa besökare kommer att se skillnaden.

Dags att testa om det fungerar. Eftersom att modulen inte fungerar när vi är inloggade så loggar vi ut eller startar en annan webbläsare och går in på sidan. Då sidorna inte finns cachade med en gång så uppdaterar vi sidan och därefter tittar vi på källkoden för sidan. I Chrome hittar du det under "Verktyg -> Visa källa", i Firefox finns det under "Verktyg -> Webbutvecklare -> Källkod".
Längst ner på sidan skall följande text finnas om det fungerar:
<!-- Page cached by Boost @ 2013-11-13 06:02:32, expires @ 2013-11-13 07:02:32, lifetime 1 timme -->
Boost lägger till den texten på alla sidor som den skapar. Om vi inte vill att den texten skall finnas, efter att vi har sett att det fungerar, så går vi till "Konfiguration -> System -> Boost" och väljer fliken .htaccess. En bit ner på sidan ser du bocken för "Boost tag", välj alternativet "Do not set Boost header" så kommer texten inte att finnas med nästa gång html versionen av sidan skapas.

Slutsats
Jag testade sidan innan jag aktiverade modulen och efter med hjälp av http://tools.pingdom.com/fpt/ Resultatet kan ni se i bilden nedan.

Innan jag installerade Boost så hade jag Drupals egna cache aktiverad. Nackdelen med den är dels att allting som ligger i cachen rensas vid varje cron körning. Dessutom så sparar den cachen i databasen vilket betyder att den måste göra några databasfrågor för att kunna presentera sidan.
Första testet tog ca 12,5 sekunder, då gjordes testet efter att Drupals interna cache hade rensats så att all php-kod och alla databas frågor var tvugna att utföras. Test nr 2 tog ca 4 sekunder, då hade Drupal cachat informationen i databasen vilket förklarar att det då tog en tredjedel av tiden.
De sista testerna är med Boost aktiverat. Då ligger tiden på ca 2,5 sekunder. Inte riktigt en halvering jämfört med Drupals interna men inte långt ifrån. Med tanke på att det inte tar många minuter att installera så är det helt klart värt besväret.
Fortfarande är jag inte riktigt nöjd med hastigheten så mer optimeringar kommer att göras. Resultatet och lösningarna kommer att presenteras här på bloggen.