webForumDet fria alternativet

Spara tumnaglar i cache, bra, dåligt?

.NET

8 svar · 812 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Jag ska bygga en lite tumnagelgenererare och har alltid tidigare (i asp) genererat bilden varje gång den visas och det är ju smidigt men lite prestandakrävande och funderar nu om det kan vara ett bra sätt att lagra bilderna i cachen i x-antal dagar?
Att lagra tumnaglarna på hårddisken är inte uteslutet men känns mer oldscool!

Vad har ni att säga om detta? :)

Medlem sedan juni 20019 024 inlägg
#2

Lagra på hårddisk. Punkt.

Medlem sedan dec. 19996 721 inlägg
#3

Ja, lagra på hårddisk. Utropstrecken.

Medlem sedan feb. 2005280 inlägg
#4

Hårddisk. Möjligtvis i db. Cache känns inte bra att binda upp massa minne till dylikt. Vad är dåligt med hårddisk?

Medlem sedan juni 20003 076 inlägg
#5

Oj, vad eniga ni var då! :)

frequz skrev:

Vad är dåligt med hårddisk?

Det sämsta är att bilderna blir "hårdkodade" i programmerngsspråk!
I webbutiken visas olika stora tumnaglar beroende på om det ex är en kampanjbild, detaljbild, bild i produktlista osv.
Mao. många bilder att lagra på disk!
Och den dagen ägaren till butiken bestämmer sig för att bredda butiken med 100 pixlar som gör att bilderna påverkas och också behöver breddas. Brrr!!

Och låt säga 10.000 produkter, det skulle då bli ca. 50.000 bilder på disk istället för 10.000 (orginalbilder), sen lagras de som fått en sidvisning i cache i ex 1-2 dagar.

Någon av er som kan motivera varför cache är helt fel?

Medlem sedan maj 20012 812 inlägg
#6

Här kommer mina 2 cent.

1. Du måste ha ett "fast" lagringsställe för dina bilder först, antingen i db eller på hårddisken, så du har något att göra dina thumbnails ifrån. Du kan ju knappast förlita dig på att det som finns i cahcen finns för evigt.

2. Ur en ren prestanda synpunkt så är det bästa att lagra dessa omgjorda till färdiga thumbnails på hårdisken för varje bild som du också har på hårddisken.

3. Det kan ju finnas tillfällen då det kanske inte är så praktiskt att spara ner thumnailens på disk utan att du vill ha de i minnet på din dator, och de får plats med rätt många små bilder i några 10 tals MB ramminne. Din bilder är ju knappast större än 20 KB... Och då kan du ju spara undan byte-arrayn av bilden i cachen istället för hela image-objektet, eftersom du ändå måste streama utan bilden till klienten och det kommer att se som en byte-array, så kan ju ju lika gärna streama ut byte-arrayn direkt...

Så ta din bild, gör din thumbnail, gör om den till en byte[] och lägg i cachen. Det du vinner lite på här är att själva Image objektet kan Disposas direkt efter det att du har fått din byte-array.

Men ur ren prestandasynpunkt så skall thumbnailen ner på disk och hämtas därifrån istället för att blanda in .NET i den delen....

- M

Medlem sedan maj 20012 812 inlägg
#7

doggelito skrev:

Och den dagen ägaren till butiken bestämmer sig för att bredda butiken med 100 pixlar som gör att bilderna påverkas och också behöver breddas. Brrr!!

Hur ofta händer det tro? Visst finns det tillfällen då det är bättre att ha de i cachen än på filsystemet och detta skulle kunna vara ett sådant tillfälle, men då tycker jag nästan att storleken på bilderna skall ändras 1-2 gånger om DAGEN för att det skall vara lönt. I just detta fallet, så är det ju bara att skriva en applikation som tar alla bilder och spottar ut de 5 olika thumbnailsen i de storlekar som du själv bestämmer...

doggelito skrev:

Någon av er som kan motivera varför cache är helt fel?

Cache är inte alls helt fel, i vissa situationer. Men just i detta så tycker jag att prestandahiten som blir att du skall blanda in .NET för att hämta bilden och streama ut den till klienten och det faktum att de kommer att ta upp internminne i onödan inte är motivierat med att du tror att man kommer att ändra storlek på bilderna någon gång, även om det någongång kommer att hända (vilket jag knappast tror) så händer det 1-2 gånger under sitens hela livstid, och då kan servernsresurser användas på bättre sätt. Men visst det är bara att sätta dig och räkna på det.

Har ni lite trafik och massor med internminne, så kommer det knappast att märkas någon skillnad, med mycket trafik och lite internminne så kommer det att märkas tillslut. Men helt klart så är det bra mycket bättre att spara ner thumbnailsen i cachen än att skapa dem vid varje förfrågning, för är det något som GDI+ är, så är det LÅNGSAMT....

- M

Medlem sedan feb. 2005280 inlägg
#8

Jag skulle utgå från de stora originalen, och generera thumbs on request ,eller från en knapp i admin-läget.

Cache "känns inte bra", det är väl en bra motivering :) Nä men jag tycker det känns onödigt, ram minnet kan ju användas till bättre saker. Fast det beror väl på hur många bilder vi talar om per dag som behöver cacheas?

Jag kan ju som referens tala om hur vi gjorde för en sajt vi byggdes nyss här på jobbet, där hämtas alla bilder (för projekten) i realtid från en webservice och streamar ut dem. Men så tar sidorna 2-4 sekunder att genereras också.

Man skulle kunna köra en aspx som genererar ut bilderna i rätt format, och sätta en OutPutCache på den, den är väl den cachningen jag skulle kunna tänka mig....

Medlem sedan juni 20003 076 inlägg
#9

Tack Gladh och frequz, jag tror ni har övertygat mig! :)
Hårddisk får det bli! Punkt Utropstecken :bire

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)