Här är en sammanfattning av olika sätt att förbättra prestandan på websidor som har våra webhotell.
Generella tips
- Använd små filer. Det är inte alla som har en snabb Internet-förbindelse. Även om det går fort för dig, så kan det gå sakta för andra.
- Använd inte WIDTH- och HEIGHT-attribut till IMG SRC för att ändra storleken på dina bilder. Gör istället bilderna mindre på förhand och använd A HREF till att länka till den stora bilden om du vill att dina besökande ska se det.
- Testa hur snabb visningen av din sida är med en netbook (liten, trög laptop).
- Testa hur snabb visningen av din sida är med en mobiltelefon utan höghastighetsnät.
- Kom ihåg att Flash och PDF ofta används till att sprida virus, spionprogramvara och annan skadlig programvara. Det är i tillägg tyngre att ladda för din besökandes webläsare, speciellt för små handhållna enheter. Använd HTML och CSS istället.
- Minimalisera användandet av externt innehåll (bilder, annonser, Flash, filmer, osv.). "Externt" betyder innehåll du hämtar/laddar från andra ställen på nätet för visning på din websida.
Verktyg på egen datamaskin
Alla som jobbar med prestanda på websidor bör testa sina websidor med flera olika webläsare och gärna med mobiltelefon som inte är uppkopplad på WLAN. Följande webläsare bör testas på egen maskin:
- Firefox (Linux, Mac, Windows)
- Google Chrome (Linux, Mac, Windows)
- Internet Explorer (Windows)
- Opera (Linux, Mac, Windows)
- Safari (Mac, Windows)
När du testar så rekommenderar vi att du använder webläsare som låter deig se hur stora ressurser du använder. Google Chrome (View->Developer->Developer Tools), Opera (Tools->Advanced->Opera Dragonfly) och Safari (Develop->Show Web Inspector) kommer med sådana tillägg inbyggda, men det kan tänkas att du måste aktivera dom manuellt. Se i dokumentationen.
Till Firefox så rekommenderar vi att man använder båda av följande tillägg:
PHP oc CGI i länkar och includes
När vi skriver om PHP under så är det samma princip som gäller för CGI, eftersom det fungerar på liknande sätt.
På våra webservrar så kör PHP som CGI under suphp. PHP-websidor och -script kör därför som separata processer för varje förfrågan via web med din UNIX-användares (FTP-användarnamn) rättigheter. Dessa processer avslutas när websidan är färdigt laddad och varken koden eller resultatet lagras på webservern.
Det innebär acceptabel säkerhet, men offrar lite prestanda. Du bör därför undgå typiska programmeringstekniker för "acceleration" och "caching" med PHP som helt enkelt inte fungerar. I värsta fall så kan du stöta på webserverns självförsvarsmekanism, som slår in när websidan försöker att ladda för många samtidiga element, sidor och script.
- Bilder bör alltid laddas statiskt med
<IMG SRC="/mapp/med/bild_4711.png">
och inte via ett PHP-/CGI-script, t.ex. <IMG SRC="/mapp/med/bild_visar.php?bild=4711.png">
Motsvarande: gör småbilder på förhand när du laddar upp originalen till servern, generera dom inte varje gång dom visas.
- CSS och JavaScript bör av samma anledning også laddas från statiska filer, inte PHP.
- Komprimering av innehåll bör göras innan det laddas upp till servern, inte via PHP. Om du känner till aktiverar och använder ob_gzhandler, så är det ett undantag frå regeln.
- Mellanlagra (cache) inte innehåll i PHP-filer, lagra dom istället som statisk HTML.
Bra: <a href="/cache/1/1a/1a23bsadf.html">Cachat dokument</a>
Också bra: cache informationen i din MySQL-databas.
Dålig: <a href="/cache/1/1a/1a23bsadf.php">Cachat dokument</a>
- Använd inte include(), include_once(), require() eller require_once() med absoluta URLer. Använd relativa referanser istället.
Bra kod: include("/includes/myinclude.php")
Dålig kod: include("http://www.example.com/includes/myinclude.php")
Det som står över startar en ny PHP-process för varje include(), och gör att dina websidor går mycket saktare.
Databasanvändning
- Koppla upp mot databasen max en gång per sidovisning.
- Specificera kolonnerna du behöver data ifrån, t.ex. f.eks.:
SELECT efternamn, fornamn, stad FROM folk;
Undvik den generella SELECT * FROM folk;
om du inte behöver alla kolonner.
- Tabeller som uppdateras och det hämtas data ifrån ofta kan gå sakta med MyISAM-motorn, överväg att byta till InnoDB:
ALTER TABLE folk ENGINE innodb;
Exempel
Exemplen under använder skärmbilder från Chrome 8. I Chrome 9 väljer man panelen "Network" istället för "Resources", men annars så är det likadant. Du kan läsa mer om det på Google Chrome utvecklar-websidorna.
www.vg.no
Först så ser vi på ett exempel från www.vg.no via vår 1 Gbps-linje, nerladdningstiden är längre på saktare linjer:
www.vg.no laddar innenhåll från flera källor, bland annat andra servrar hos VG, och t.ex. en extern leverantör midasplayer.com. Detta ser i stort sett ut till att gå fort, med att hämta externt innehåll och innehåll från andra servrar kan leda till en sida som laddar saktare. Om vi hade sett lite längre ner i listan över hämtade element så hade vi sett vad det är som utgör den sista sekunden av tiden.
Domeneshop SOS
Här är ett liknande exempel för den punkten i våra frågor och svar som du ser på nu:
Som du ser, så är faq
huvudsakligen ressursbegränsat av själva CGI-scriptet, medans hämtning av bilder går fort. En eventuell förbättring må därför ligga i optimalisering av koden i själva faq
.