Jag har en generell aspx-sida som mha olika inparametrar skapar en gif/jpg bild med ett visst typnitt/färg/storlek/osv och sen skickar ut det till klienten. Jag använder alltså typ:
Jag har nu märkt att första gången jag anropar aspx-filen varje dag, så tar det omkring 5 sekunder att få fram bilden, restarande gånger går det blixt-snabbt...
...varför tar det sån tid? Den ska väl inte behöva kompilera om koden typ varje dag?
Om jag skulle använda mig av Caching på sidan, hade det hjälpt då tro? ...eller hade prestanden blivit sämre. Jag vet att jag ju kan ställa in att den ska Cacha baserat på inparametrar......men det finns flera 1000 kombinationer...så skulle jag egentligen tjäna något på det?
Första gången en ASPX sida requestas kommer den kompileras, det är troligen det som tar 5 s. Vid efterföljande request kommer koden då redan vara kompilerad och körs på engång. Om man inte har ändrat något i ASPX filen och det ändå tar tid beror det troligen på att ASPNET "recyclar" sin process när den inte använts på ett tag. Att generera en bild kommer troligen fungera snabbt på mindre siter, men om man får en väldigt stor besökarskara kan det bli problem, därför kan man då använda caching för att då kommer bilden endast genereras vid första requesten med just de parametrarna. Då kommer sedan bilden visas direkt ur minnet på servern utan att processorn behöver arbeta med att generera bilden engång till.
Inte nog med att det tar tid varje dag, det kan vara så att varje besökare genererar en omkompilering.
Som sagts tidigare så kompileras sidan vid första besöket och ligger kvar i cachen så länge det finns någon session på webservern. När den sista sessionen försvinner så töms cachen på data. Vilket kan resulterar i att om du har en besökar var 30 minut och session tiden är 20 minuter så kommer din sida att kompileras för varje besökare.
Om inte bilden ändras hela tiden så är det bättra att generera bilden 1 ggr om dagen, eller 1 gång i timmen och sedan ha en fast sök väg till den genererade bild.
Säg att du vill ha 24 olika bilder, som presenteras vid varje timme. Då genererar du bilden vid varje heltimme och dina besökare kommer att hämta en statisk bild. Klart mycket bättre för prestandan.
...så kommer din sida att kompileras för varje besökare.
Funkar det så? Det låter ju lite halv-dumt att den ska behöva om-kompilera? Jag kan förstå om den töms från cachen och att den sen behöver laddas in igen...
Antalet bilder är nog närmare 1000 stycken....Antalet besökare ligger på ca. 3000 / dag. Sjävlklart kan jag skapa bilderna själv, men det känns som att detta hade varit en smidig lösning, om den bara funkar bra....
Det blir så eftersom ASP.NET sidorna endast kompileras in i minnet. De kompileras alltså inte till en DLL som man sedan kan återanvända. (Så som jag förstått det)
Om du har 3000 besökare per dag och 1000 bilder så kan det i extrem fallet bli frågan om 3000*1000 kompileringar av dina bilder. Och det äter prestanda så det sjunger om det.
Alltså den bästa lösningen ur prestanda synpunkt, blir att du själv/något batch jobb, kompilerar dessa bilder och sedan så hämtar man dem så vanliga statiska bilder. Dynamik är jättebra men har ett pris som heter prestanda.
Vet inte riktigt om jag håller med om att varje besökare genererar en omkompilering. Har testat detta på följande sätt, användare på dator 1 gör en request mot en asp.net sida, sidan kompileras vilket tar ca 2 s, sedan gör jag en request från dator 2 och då visas sidan på engång. Cachning är ej aktiverad.
Nej varje besökare genererar inte en omkompilering om sidan redan finns i minnet. Detta har inget med cachen att göra.
Så i ditt fall. Första besökaren läser filen, gör alla checkar och kompilerar sedan sidan till minnet, kör sidan. Besökare nr 2 kommer till sidan och hittar en kompilerad sida i minnet och kör den. Betydligt fortare.
Cachningen gör bara att man slipper att köra sin sida igen, man tar den färdiga HTML-koden som sidan har genererats och skickar iväg denna till nästa besökare, vilket är ännu snabbare.
Vill du istället kolla om sidan omkompileras eller ej. Så besök sidan med en dator, vänta tills session dött och besök sidan med en annan dator. Nu skall det inte finnas någon sida i minnet vilket gör att även besökare nr 2 får kompilerar om sidan.