Utisci korisnika

Da li zato što je DLS novina kod nas (bar za mene)ili još više što će mi koristiti, tek, nalazim da je Arhitektura, izgradnja i održavanje PC računara prava stvar i svakom…

Želeo bih da Vam se zahvalim na Vašoj brzoj pošiljci, sertifikatu i novom kursu, koji sam juče preuzeo putem Post-expresa. Još jedanput Vam se zahvaljujem na Vašoj profesionalnosti.…


Kompletna lista utisaka

Testiranje online

Arhitektura računara

Za one koji žele da znaju više.

Windows OS

Ovo bi svakako trebalo da probate.

Odnosi s javnošću

Koliko znate PR?

Pogledajte još neke od testova

Newsletter

Ukoliko želite da Vas redovno obaveštavamo o novostima sa Link eLearning sajta prijavite se na našu newsletter listu.

Ime:

Prezime:

Email:


Anketa

Arhiva anketa

BAZA ZNANJA


Kurs: Advanced Web Application Technologies

Modul: Podešavanje i optimizacija veb aplikacije

Autor: Goran Aritonović

Naziv jedinice: Keširanje u veb aplikacijama


Materijali vezani uz ovu lekciju:

- Test keširanje u veb aplikacijama
- Keširanje u veb aplikacijama (PDF dokument)



Korišćenje keširanja

ASP.NET keširanje čuva često pristupane podatke ili cele web strane u memoriji u kojoj im se može brže pristupiti nego da su ti podaci u bazi podataka ili fajlu. Keširanje poboljšava performanse web aplikacije i povećava njenu skalabilnost. Podaci koji se ne menjaju često i kojima pristupa veliki broj korisnika su dobar kandidat za keširanje. Prvim pristupom takvim podacima vrši se njihovo smeštanje u keš, sledećim zahtevom ti podaci se uzimaju iz keša sve dok keš ne iščezne. ASP.NET i .NET frejmvork omogućavaju korišćenje prednosti keširanja bez pisanja mnogo koda.

  

Aplikaciono keširanje (application caching)

Aplikaciono keširanje je proces čuvanja podataka u Cache objektu. Cache objekat je raspoloživ kao svojstvo Cache Page objekta tj pristupa mu se kao Page. Cache. Cache objekat je vidljiv na nivou aplikacije. Podaci u kešu mogu se razmenjivati između korisničkih sesija , kao i između uzastopnih korisničkih zahteva jednog te istog korisnika.

  

Upotreba Cache objekta

Sa Cache objektom radi se na sličan način kao i sa Session objektom. Upis podataka u Cache objekat može se vršiti implicitno ili eksplicitno.

Implicitna metoda:

Cache[“mojKljuc”] = mojaVrednost;


Eksplicitna metoda:

Cache.Insert(“mojKljuc", “mojaVrednost”);


Čitanje podataka iz Cache objekta vrši se na sledeći način:

mojaVrednost = (tip)Cache[“mojKljuc”];


U prethodnom izrazu sa (tip) je simbolički označena operacija kastovanja tipa object u željeni tip podataka.

  

Primer upotrebe Cache objekta

Sledećim kodom ilustrovaćemo proces stavljanja podataka u keš, kao i proces iščitavanja podataka iz keša:

protected void Page_Load(object sender, EventArgs e)
{
    if (Cache["Pozdrav"] != null)
    {
        Label1.Text = (string)Cache["Pozdrav"];
    }
    else
    {        
        Label1.Text = "Ne postoje podaci u kesu";
        Cache["Pozdrav"] = "Hello, world!";               
    }
}

Pri učitavanju strane proverava se da li postoji stvka u kešu sa klučem “Pozdrav”. Ukoliko ova stavka postoji ona se iščitava. Ukoliko stavka ne postoji onda se ona kreira.

  

Insert metoda Cache objekta

Insert metoda Cache objekta ima sledeću deklaraciju:

public void Insert( string key, Object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration )

Atributi key i value predstavljaju ključ i vrednost stavke u kešu. Prametar “dependencies” je objekat klase CacheDependency i on identifikuje fajl ili  ključ druge stavke keša sa kojom je data stavka keša povezana. Kada se ovakav fajl ili stavka promeni objekat se skida iz keša. Atribut absoluteExpiration predstavlja vreme (DateTime objekat) nakon kog objekat treba ukloniti iz keša. Atribut slidingExpiration  predstavlja vreme (TimeSpan objekat) posle koga će objekat biti uklonjen iz keša ukoliko mu neki korisnik ne pristupi. Treba ga postaviti na vrednost  System.Web.Caching.Cache.NoSlidingExpiration ukoliko ne želimo da ga koristimo.

 

Definisanje zavisnosti keša

Korišćenjem metode Insert u keš ćemo ubaciti stavku sa ključem "kljuc1” i vrednošću “vrednost1” koja će zavisiti od fajla “Podaci1.xml”, objekat se skida iz keša ukoliko mu niko ne pristupi duže od 10 minuta:

Cache.Insert("kljuc1", "vrednost1", new CacheDependency(Server.MapPath("Podaci1.xml")),
Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0));


Korišćenjem metode Insert u keš ćemo ubaciti stavku sa ključem "kljuc2” i vrednošću “vrednost2” koja će zavisiti od fajla “Podaci2.xml”, koja će u kešu biti tačno 20 minuta:

Cache.Insert("kljuc2", "vrednost2", new CacheDependency(Server.MapPath("Podaci2.xml")),
DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration);

 

Keširanje izlaza stranice (page output caching)

Nakon što se strana prikaže u web browseru, web browser često čuva kopiju strane na lokalnom računaru. Sledeći put kada korisnik zatraži istu stranu, browser proverava da li je keširana verzija još uvek validna i prikazuje keširanu stranu korisniku. Ako korisnik zahteva stranu više puta ona će samo jednom biti generisana od strane web servera. Ovakvo keširanje na klijentskoj strani zahteva da svaki korisnik dobije dinamički generisanu stranu, odnosno ako 100 korisnika zahteva stranu ona mora biti 100 puta generisana. Keširanjem izlaza stranice na web serveru (page output caching), ASP.NET čuva kopiju renderovane ASP.NET strane na web serveru. Nakon keširanja stranice na web serveru , sledeći korisnik će dobiti zahtevanu stranu gotovo trenutno. Ne treba keširati strane čiji se sadržaj mnogo menja između klijentskih zahteva.

 

Konfigurisanje keširanja za stranu

Konfigurisanje keširanja za straanu vrši se u maarkerskom kodu strane korišćenjem OutputCache direktive kao u sledećim primerima:

<%@ OutputCache Duration=“20" VaryByParam="none" %>
<%@ OutputCache Duration="10" VaryByParam="DropDownList1" %>


U prvom slučaju strana se čuva u kešu 20 sekundi i ona će biti prikazana korisniku iz keša, ukoliko korisnik u toku 20 sekundi nakon njenog stavljanja u keš pristupi ovoj strani. To znači da ukoliko se sadržaj strane promenio posle recimo 5 sekundi od njenog poslednjeg stavljanja u keš, korisnik koji posle 10 sekundi od stavljanja u keš pristupi strani neće videti te promene.

U drugom slučaju strana ostaje u kešu 10 sekundi ili manje ukoliko se promeni izabrana stavka u DropDownList1 kontroli.

 

Demonstracija keširanja izlaza stranice

Neka je korisnički interfejs web strane definisan sledećim markerskim kodom:

<asp:Label ID="Label1" runat="server" Font-Size="XX-Large"
  Text="Nista nije odabrano"></asp:Label><br />
<br />Odaberite: <br />
<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem>Izbor jedan</asp:ListItem>
    <asp:ListItem>Izbor dva</asp:ListItem>
    <asp:ListItem>Izbor tri</asp:ListItem>
</asp:DropDownList>
<br /><br />
<asp:Button ID="Button1" runat="server" Text="Posalji"
  onclick="Button1_Click" />

 

U event hndleru za Click događaj na dugme upisaćemo sledeći kod:

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = DropDownList1.SelectedItem.ToString() + " u " +
      DateTime.Now.ToLongTimeString();
}

Ukoliko unutar OutputCache direktive postavimo VaryByParam atribut na vrednost "none” dobijamo situaciju kao na slici.

 

 

 

Odnosno korisnik dobija pogrešnu informaciju ako zatraži stranu koja je u kešu a on promeni stavku iz DropDownList kontrole. To se neće desiti ukoliko atribut VaryByParam postavimo na ID kontrole koja prouzrokuje promenu sadržaja strane, a to je u našem primeru kontrola čiji ID ima vrednost  “DropDownList1”.

 

Parcijalno keširanje strane

Potrebno je deo strane koga želimo da keširamo staviti unutar .ascx korisničke kontrole. Potrebno je dodati @OutputCache direktivu unutar korisničke kontrole. Tada će se korisnička kontrola keširati odvojeno od strane koja je hostuje.


Smatrate da je ova lekcija korisna?  Preporučite je. Broj preporuka:1


Molimo Vas unesite svoje podatke i dobićete pristup besplatnim lekcijama.

Ime: 
Prezime: 
Email: