HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

ASP.NET Web oldalak átmeneti tárolása


Web Cache 1. rész

Példaprogram letöltése

12949 bájt

Az ASP.NET használatával lehetőségünk van arra, hogy az egyes web oldalaink tartalmát egy megadott időre a cache tárolóba helyezzük. Ennek nagy előnye az lesz, hogy így nem kell az adott oldalt újra generálni egy következő ügyfél kérés esetén, hanem egyszerűen a már létrehozott és tárolt eredményt visszaküldeni a kliens böngészőjébe. Nyilván ez a technika csak akkor használható, ha az adott web oldal tartalmát program generálja, de az nem változik minden kérésnél, hanem annál csak ritkábban.
Például ha web oldalunk tartalmát egy adatbázis tartalma alapján jelenítjük meg, melyet csak hetente egyszer frissítünk, akkor felesleges minden kérés esetén az adatbázishoz fordulni, lefuttatni a megfelelő lekérdezést majd ebből web oldalt generálni és ezt visszaküldeni a klienshez. Ilyen esetben elegendő hetente egyszer elvégezni ezt a web oldal generálást, majd egész héten csak a már kész web oldalt felhasználni.
Ezzel a módszerrel nagy mértékben csökkenthetjük szerverünk terheltségét és a web kiszolgálásunk gyorsabb lesz.

E feladat megoldása több részletben is történhet: nem feltétlenül szükséges az egész web oldalt tárolni, megoldható, hogy annak csak egy része, vagy akár csak az adatbázisból történő lekérdezés eredménye kerüljön átmenetileg tárolásra. Kezdjük azonban az alapoknál: cikksorozatunk első részében egy dinamikusan generált teljes web oldalt helyezünk az átmeneti tárba 30 másodperc időtartamra. Így ezt az oldalt akárhányszor is kérjük le, az mindig csak 30 másodpercenként generálódik újra.
Nézzük először a web oldal létrehozását. Két dolgunk van itt: az első, hogy egy Label-re kiírjuk az aktuális időpontot és generáljunk egy ciklussal 6000 számot, melyet megjelenítünk a web oldalon.
A Label-re kiírt aktuális időpontot figyelve tudjuk majd nyomon követni, hogy az oldal tartalma mikor lett létrehozva. A tartalomgeneráló ciklus pedig elég hosszú ideig fog futni ahhoz, hogy szemmel látható legyen a megjelenítési idő különbsége, ha az oldal tényegesen akkor kerül generálásra, amikor a kérés történik, vagy amikor az átmeneti tárból jön.
Mind a két feladatot az oldalba ágyazott script segítségével végezzük el miután a lapon elhelyeztünk két Label kontrolt. Ezt a script-et az oldal betöltésekor futtatjuk, így a Page_Load eseményt használjuk fel. Ahhoz, hogy ez létre is jöjjön, ne felejtsük el átírni az AutoEventWireup értékét igazra.
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="true" Inherits="CacheTest.WebForm1" %>
Ezt követően jöhet a szükséges script létrehozása.
    <script language="C#" runat="server">
      void Page_Load(Object sender, EventArgs e) {
        if (!IsPostBack)
        {
A Label1-re írjuk ki tehát az aktuális időpontot. A kódból látható, hogy ahányszor az lefut, a Label1 értéke mindig aktualizálva lesz. Ezt fontos megjegyeznünk, mert amikor majd az átmeneti tárból jön az oldal, akkor látható lesz, hogy az időpont nem változik, ebből következtethetünk arra, hogy e program sorok tényleg nem futottak az átmeneti tár használata miatt.
          Label1.Text += " " + DateTime.Now.ToString("G");
Ezt követően jöhet a ciklus, mely a Label2 tartalmát feltölti 6000 számmal.
          for (int i=1000; i<7000; i++)
          {
            Label2.Text += " - " + i.ToString();
          } 
        }        
      }
    </script>
Ezen a ponton még semmi olyat nem tettünk, amely arra utasítaná a rendszert, hogy ezt a lapot tegye az átmeneti tárba. Ennek ellenére próbáljuk ki a programot úgy, hogy egymás után többször is behívjuk ugyanazt az oldalt. Megfigyelhető lesz, hogy a Label1 értéke minden híváskor módosul az aktuális időpontra.
Intézkedjünk most arról, hogy az átmeneti tár használatra kerüljön. Ehhez a web oldalunk elejére szúrjuk be a következő sort:
<%@ OutputCache Duration="30" VaryByParam="none" %>
Ezzel utasítottuk a rendszert, hogy a generált web oldalt helyezze el az átmeneti tárba. Az elévülés időtartamát a Duration paraméterben adhatjuk meg másodpercben, melyet most 30-ra választunk. Ezzel azt érjük el, hogy az első kéréskor a web oldal generálása után az eredmény bekerül az átmeneti tárba és így ha 30 másodpercen belül egy újabb kérés érkezik erre az oldalra, akkor nem kerül újra meghívásra a WebForm1.aspx, hanem az imént eltárolt eredmény kerül vissza a klienshez.
A VaryByParam paraméterre a cikksorozat későbbi részeiben még visszatérünk.
Fordítsuk le most az alkalmazást, majd ezután indítsuk el egy újabb példányát az Internet Explorer-nek és írjuk be: http://localhost/CacheTest/WebForm1.aspx. Ezt követően egy újabbat és ismét ugyanezt a címet. Megfigyelhető, hogy a létrehozás időpontja az első hívás időpontja lesz. Folytassuk az újabb és újabb Internet Explorer-ek indítását, amíg el nem telik a 30 másodperc. Ekkor látható lesz, hogy a létrehozás időpontja megváltozik.
Fontos tudni, hogy ha csak egy böngészőt használnánk és a Refresh (Frissítés) gombbal próbálnánk az újbóli betöltést, akkor nem a tárolt oldalt kapnánk meg, hanem egy frissen generált web lapot. A valós helyzetben persze nem egy kliensről és így nem csak egy böngészőről van szó mint most a tesztnél, így valós helyzetben ilyen probléma fel sem merülne.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 271. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |