Hämta filer parallellt med PHP och libcurl

03 Jan/11 12

Kategorier: PHP, Exempel, Prestanda

Varför hämta filer parallellt?

I normala fall när du surfar runt på webben så hanterar webbläsaren alla nerladdningar. Alla moderna webbläsare hämtar de filer (CSS, JavaScript, osv) som finns på en webbplats parallellt. Dvs, alla filer hämtas samtidigt istället för att nerladdningarna ska behöva vänta på varandra innan de kan börja.

Låt säga att du hämtar information från andra webbplatser för att lagra och sedan presentera den på din egna webbplats. Ett exempel kan vara affiliatenätverk, som ofta erbjuder information om produkter via XML-filer. Här kan det vara trevligt att hämta all data parallellt för att snabba upp processen.

(läs hela artikeln)

Fulltext sök med PostgreSQL

26 Dec/10 21

Kategorier: PostgreSQL, Prestanda

Vad är Fulltext sök?

Fulltext sök är en funktion som erbjuder möjligheten att söka i en tabell och hitta de rader som matchar en specifik fråga. Fulltext låter dig även ranka resultatet efter vilket relevans och likhet frågan har till texten man söker i.

Fulltext sök låter dig göra en mer fördjupad sökning än vanliga funktioner så som LIKE, som enbart söker efter ett ord eller en fras i texten. LIKE är dessutom väldigt prestandakrävande eftersom den inte använder något index, utan måste gå igenom alla rader i tabellen vid varje sökning.

(läs hela artikeln)

Prestanda och ORDER BY RAND()

23 Dec/10 2

Kategorier: PHP, MySQL, Prestanda

Använd inte ORDER BY RAND() om du har många rader i tabellen

För att få ut 10 rader i slumpad ordning från en tabell i MySQL så använder man väldigt ofta funktionen ORDER BY RAND() ihop med LIMIT:

SELECT uid, username, passwd FROM users ORDER BY RAND() LIMIT 10;

Detta är ingen fara så länge det handlar om mindre data (~250 rader) men vad händer om du ställer samma fråga till en tabell med 25000 rader? Då kommer MySQL generera 25000 slumpade tal, vilket är ganska så tungt ur prestandasynpunkt. Därefter behöver MySQL sortera dessa 25000 tal för att veta vilket tal som är lägst, vilket också är tungt då MySQL skapar temporära tabeller för detta.

(läs hela artikeln)

Ladda JavaScript i botten av din kod

11 Dec/10 3

Kategorier: Webb, Prestanda, JavaScript

För några dagar sedan läste jag en artikel som Jonas Lejon hade länkat på Twitter. Artikeln handlade om hur JavaScript laddas av olika webbläsare och hur externa JavaScript kan bli en flaskhals för hur din webbplats laddas.

Normalt laddar jag mina JavaScript i <head>-taggen och har inte reflekterat över detta eftersom dagens moderna webbläsare hämtar alla externa filer parallellt. Problemet är dock inte att hämta filerna parallellt utan att webbläsaren väntar helt med att rendrera någon HTML-kod förrens allt i <head>-taggen har laddats klart, oavsett om både HTML och CSS redan laddats klart tidigare.

(läs hela artikeln)

Att använda Memcache i PHP

08 Dec/10 13

Kategorier: PHP, Webb, Exempel, NoSQL, Prestanda

Vad är memcached?

memcached är en server som enkelt låter dig lagra data i minnet för ökad prestanda. Memcache utvecklades ursprungligen av Brad Fitzpatrick åt LiveJournal 2003, men används idag av flera stora webbplatser så som Facebook, Twitter, YouTube, Reddit och många fler.

Tanken med att lagra data i minnet är att minska belastningen på den databasserver som blir flaskhalsen på en större webbplats. Många webbplatser idag har dynamiskt innehåll som sällan eller kanske till och med aldrig förändras. Ett exempel kan vara en lista med länkar som visas i footern på varje sida över hela webbplatsen. Dessa sparas så klart i en databas så en administratör enkelt kan lägga till och ta bort länkar då det behövs. Även om de ändras väldigt sällan så måste de fortfarande hämtas från databasservern för varenda sidvisning.

(läs hela artikeln)

Optimera MySQL för bättre prestanda

05 Dec/10 5

Kategorier: Server, Exempel, MySQL, Prestanda

Montera dina filsystem med noatime

En av de största flaskhalsarna när det kommer till större databaser är självklart disken. Om din server har mycket aktivitet mot disken kommer självklart även MySQL att drabbas. En sak som kan vara bra då är att montera det filsystem där din MySQL-data lagras med noatime. Faktum är att du egentligen kan montera alla dina filsystem (ext2, ext3, ext4, ufs, ufs2, m.fl) med noatime.

Utan noatime så kommer ditt filsystemet att uppdatera inoder för alla filer som används och uppdatera tiden som anger när filen senast användes. Dvs, utan noatime kommer ditt filsystem skriva till disken varje gång du läser en fil, mapp, osv.

(läs hela artikeln)

MD5 och SHA1 hashar i en databas

02 Nov/10 6

Kategorier: PostgreSQL, MySQL, Prestanda

Hexadecimalt

För ett tag sedan bestämde jag mig för att indexera 30 miljoner MD5 och SHA1 hashar i en databas. Syftet var såklart att skapa en databas för att kunna översätta en MD5 eller SHA1 hash till det ursprungliga ordet. Detta kallas för "Space-Time Trade Off"-attack och innebär att man gör alla tyngre beräkningar innan och sparar resultatet på disk. Dvs, man offrar diskutrymme för att kunna spara in tid vid ett senare tillfälle.

Då jag planerade att lagra en större mängd hashar i en sökbar databas, så ville jag självklart spara så mycket diskutrymme som möjligt. Den första och kanske mest självklara ändringen var att inte använda UTF-8, eftersom det tar dubbelt så mycket utrymme. Det andra sättet att spara utrymme var att spara den binära representationen av hashen istället för den hexadecimala. Det är detta som jag förklarar lite närmare nedan.

(läs hela artikeln)

«