Väärtuste tööaegne meelespidamine Asp.Net'is

From ICO wiki
Jump to navigationJump to search

Järgnev jutt on jällegi pärit "Andmebaasipõhiste veebirakenduste arendamine Microsoft Visual Studio 2008 ja SQL Server 2008 baasil" õppematerjalist (lk 442-445)

Väärtuste tööaegne meelespidamine

Muutuvate väärtuste meeles pidamiseks on lugematul hulgal erinevaid võimalusi alustades lokaalsetest muutujatest ning lõpetades andmebaasiga. Järgnevalt vaatleme vahendeid, mida pakub ASP.NET

Veebi globaalsed muutujad (Application variables)

Läbi Application klassi on võimalik jagada infot kõikjale terves veebirakenduses: see info on saadaval kõigil lehtedel terves rakenduses sõltumata sellest, milline kasutaja neid vaatab.

Application klassi väärtuse salvestamine käib järgmiselt:

Application[”ProgrammiMuutujaNimi”] = ”Mingi väärtus”;

Lugemine käib loomulikult vastupidises omistamisega, kuid lugemisel tuleks alati arvestada asjaolu, et võib-olla ei ole seda muutujat veel tekitatud või ei ole sinna veel ühtegi väärtust salvestatud. Seega tuleks lugemisel esmalt kontrollida, kas üldse on midagi lugeda:

Object oAppVar = Application[”ProgrammiMuutujaNimi”];
if (oAppVar != null)
	Label1.Text = (string)oAppVar;

Sellised globaalsed muutujad on kasulikud jooksva statistika nt aktiivsete külastajate arvu jms tarbeks.

PS! Kõiki globaalseid muutujaid hoitakse arvuti mälus ehk nendes muutujates ei tohiks hoida suuri andmehulki nagu nt tabelid jms

Andmete puhverdamine (Cache variable)

Application klass ei ole hea koht suurte andmehulkade hoidmiseks, kuna see raiskab palju serveri mälu. Cache klassi kaudu on samuti võimalik jagada infot kõikjale terves veebirakenduses: see info on saadaval kõigil lehtedel terves rakenduses sõltumata sellest, milline kasutaja neid vaatab. Info säilib Caches kuni arvutil jätkub ressurssi info hoidmiseks või kuni teie poolt määratud ajani. Kõige lihtsam meetod Cache väärtuse salvestamiseks on järgmine:

Cache[”CacheMuutujaNimi”] = ”Mingi väärtus”;

Sellisel kujul salvestatud info säilib mälus kuni ressurssi jätkub, st kui arvuti vaba mälu hulk muutub kriitiliseks, visatakse vähem kasutatud andmed mälust välja. Kui soovite neid andmeid veel kasutada, tuleb andmed uuesti mällu laadida.

Mälust kustutamise aega saame ka ette määrata. Selleks on kaks võimalust: absoluutne aegumise aeg ja dünaamiliselt muutuv aeg. Absoluutse aegumise aja kasutamiseks tuleb väärtuse Cache salvestamiseks kasutada Cache.Add või Cache.Insert meetodit.

Järgnevalt lisame info cache' i täpselt kümneks minutiks:

Cache.Insert("CacheMuutujaNimi", "Mingi väärtus", null, 
DateTime.Now.AddMinutes(10), 
System.Web.Caching.Cache.NoSlidingExpiration);

Selles näites salvestame infot cache' i nii, et info säilib 10 minutit viimasest kasutamisest: esmalt säilib info 10 minutiks salvestamisest, kui keegi selle aja jooksul infot kasutab, säilib see veel 10 min jne. Kui keegi pole 10 minuti jooksul infot kasutanud, info kustub.

Cache.Insert("CacheMuutujaNimi", "Mingi väärtus", null, 
  System.Web.Caching.Cache.NoAbsoluteExpiration, 
  TimeSpan.FromMinutes(10));

Lugemisel tuleb arvestada, et cache’ is olev info võib kaduda ning tuleks alati mõelda välja kaks sündmuste käiku: juhuks kui info on cache' is ja juhuks kui ei ole.

Object oCacheVar = Cache[”CacheMuutujaNimi”];
if (oCacheVar != null){
	// info on Caches ning kasutame seda
	Label1.Text = (string)oCacheVar;
} else {
	// infot ei ole Caches seega otsime info kusagilt mujalt
	// lisaks kasutamisele salvestame selle ka Cachesse
	String jutt = ”Mingi väärtus”;
	Cache[”CacheMuutujaNimi”] = jutt;
	Label1.Text = jutt;
}

Veebilehtede puhverdamine (OutputCache atribute)

Lisaks oma info puhverdamisele on võimalik puhvrisse salvestada ka renderdatud veebilehti. Veebilehtede puhverdamine tõstab oluliselt veebirakenduse jõudlust, kuna raamistik ei pea neid lehti uuesti genereerima, vaid saab kasutada varem loodut. Samas tuleb selle meetodiga olla äärmiselt ettevaatlik, kuna puhverdamine tähendab, et uut infot lehele ei tule. Seega ei tohiks seda kasutada kiiresti muutuvat infot sisaldavate lehtede peal. Puhverdamiseks tuleb veebilehe .aspx faili või ka kasutaja kontrolli ascx algusesse lisada OutputCache element, kus näitate ära, kui kaua tuleb infot Caches hoida ning kuidas seda hoitakse

Näide 1: Hoiame infot puhvris 100 sekundit ning info on sama sõltumata parameetritest, millega lehe poole pöördutakse.

<%@ OutputCache Duration="100" VaryByParam="none" %>

Näide 2: Hoiame infot puhvris 100 sekundit ning infost on üks eksemplar iga pöördunud veebisirvija ja vormil olevate väärtuste koha st. kui üks kasutaja kasutab IE’d ja teine Mozillat, siis salvestatakse puhvrisse üks eksemplar mõlemale sirvijale saadetud lehest. Kui nt IE kasutaja muudab vormil infot või lisab päringuteksti ?id=2, siis salvestatakse lehest uus koopia vastavalt kasutatud parameetritele.

<%@ OutputCache Duration="100" VaryByParam="*" VaryByCustom="Browser" %>

Seansi muutujad (Session variables)

Läbi Session klassi on võimalik jagada infot kõikjale ühe seansi (sessiooni) piires. See info on saadaval kõigil lehtedel, kuhu kasutaja antud külastuse vältel satub. Seega on Session klass hea kasutaja staatust puudutava info hoidmiseks. Session klassi väärtuse salvestamine käib järgmiselt:

Session[”SessiooniMuutujaNimi”] = ”Mingi väärtus”;

Lugemine käib loomulikult vastupidises järjestus omistamisega, kuid lugemisel tuleks alati arvestada asjaolu, et võib-olla ei ole te seda muutujat veel tekitanud või ei ole sinna veel ühtegi väärtust salvestanud. Seega tuleks lugemisel esmalt kontrollida, kas üldse on midagi lugeda:

Object oSessVar = Session[”SessiooniMuutujaNimi”];
if (oSessVar != null)
	Label1.Text = (string)oSessVar;


Lehelkülje seisund (ViewState variables)

Läbi ViewState klassi on võimalik säilitada infot ühe lehekülje piires. ViewState klassi on mõtet salvestada infot, mida on vaja programmis pruukida, kuid mida ei soovi veebilehel kasutajale näidata. Sellist asja on võimalik korraldada kahte moodi:

  • Kasutada hidden välju (input type=”hidden”)
  • Kasutada ViewState klassi

ViewState klassil on peidetud välja ees kaks eelist:

  • Ise ei pea mingit välja tegema ja haldama
  • Info on kergelt krüpteeritud, st kui kasutaja vaatab lehe lähtekoodi (View\Source), siis ta ei loe sealt midagi välja.

ViewState klassi väärtuse salvestamine käib järgmiselt:

ViewState[”LeheMuutujaNimi”] = ”Mingi väärtus”;

Lugemine käib loomulikult vastupidises järjestus omistamisega, kuid lugemisel tuleks alati arvestada asjaolu, et võib-olla ei ole te seda muutujat veel tekitanud või ei ole sinna veel ühtegi väärtust salvestanud. Seega tuleks lugemisel esmalt kontrollida, kas üldse on midagi lugeda:

Object oVwVar = ViewState[”LeheMuutujaNimi”];
if (oVwVar != null)
	Label1.Text = (string)oVwVar;