15 – Zvýšení výkonu webu díky použití mezipaměti

 
 

 

Rychlost webu můžete zvýšit tím, že budete uchovávat (tzn. zapisovat do mezipaměti) výsledky operací s daty, jejichž získání by běžně trvalo dlouhou dobu a které se příliš často nemění.

Co se naučíte:

V této kapitole budou představeny následující funkce technologie ASP.NET:

 

 

Zlepšení odezvy webu pomocí zapsání do mezipaměti

Pokaždé, když si někdo vyžádá z webu stránku, musí webový server vykonat určité operace, aby tento požadavek splnil. Pro některé stránky server musí provést úlohy, které trvají (relativně) dlouhou dobu, například načtení dat z databáze. I pokud v absolutním měřítku žádná z těchto úloh netrvá dlouhou dobu, jestliže je na webu velký provoz, může celá řada jednotlivých požadavků vyžadujících, aby webový server vykonal složitou nebo pomalou úlohu, v součtu znamenat velké množství operací. To může následně ovlivnit výkon webu.

Jednou z možností, jak za takovýchto okolností vylepšit výkon webu, je zapsat data do mezipaměti. Pokud na web opakovaně přicházejí požadavky na stejné informace a tyto informace není třeba upravovat pro jednotlivé uživatele a nejsou časově omezené, místo opakovaného načítání nebo provádění výpočtu stačí data získat jednou a poté výsledky uložit. Když přijde další požadavek na tyto informace, stačí je získat z mezipaměti.

Obecně platí, že do mezipaměti jsou zapisovány informace, které se příliš často nemění. Když informace zapíšete do mezipaměti, jsou uloženy v paměti webového serveru. Můžete určit, jak dlouho mají v mezipaměti zůstat. Může se jednat o sekundy až celé dny. Jakmile doba uložení v mezipaměti vyprší, jsou informace z mezipaměti automaticky odstraněny.

Poznámka   Položky mohou být z mezipaměti odstraněny i z jiných důvodů než proto, že vypršela doba jejich platnosti. Webový server může mít přechodně nedostatek paměti a jednou z možností, jak získat paměť zpět, je odstranění položek z mezipaměti. Jak uvidíte, i když informace zapíšete do mezipaměti, musíte si vždy ověřit, zda v ní stále jsou, až je budete potřebovat.

Představte si, že na vašem webu je stránka zobrazující aktuální teplotu a předpověď počasí. Pro získání informací takového typu bude možná nutné zaslat požadavek externí službě. Protože se tyto informace příliš nemění (například v rámci dvouhodinového časového intervalu) a protože externí volání vyžadují čas a datové přenosy, jsou vhodným kandidátem na zapsání do mezipaměti.

ASP.NET zahrnuje pomocnou třídu WebCache (Webová mezipaměť), která usnadňuje použití mezipaměti na webu a přidání dat do mezipaměti. V rámci tohoto postupu vytvoříme stránku, která do mezipaměti zapisuje aktuální čas. Nejedná se o příklad s reálným použitím, protože aktuální čas se neustále mění a jeho výpočet navíc není složitý. Na tomto příkladu si ale můžeme dobře ukázat použití mezipaměti v praxi.

  1. Přidejte na web novou stránku s názvem WebCache.cshtml.
  2. Do této stránky přidejte následující programový kód a kód značkovacího jazyka:
    @{ 
        var cacheItemKey = "Time"; 
        var cacheHit = true; 
        var time = WebCache.Get(cacheItemKey); 
     
        if (time == null) { 
            cacheHit = false; 
        } 
     
        if (cacheHit == false) { 
            time = @DateTime.Now; 
            WebCache.Set(cacheItemKey, time, 1, false); 
        } 
    } 
    <!DOCTYPE html> 
    <html> 
    <head> 
        <title>WebCache Helper Sample</title> 
    </head> 
    <body> 
        <div> 
            @if (cacheHit) { 
                @:Found the time data in the cache. 
            } else { 
                @:Did not find the time data in the cache. 
            } 
        </div> 
        <div> 
            This page was cached at @time. 
        </div> 
    </body> 
    </html>

    Data jsou do mezipaměti zapsána s použitím názvu, který je jedinečný na celém webu. V tomto příkladu použijeme záznam v mezipaměti s názvem Time (Čas). V našem příkladu kódu se jedná o hodnotu proměnné cacheItemKey (klíč položky mezipaměti).

    Kód nejprve přečte záznam Time (Čas) v mezipaměti. Pokud je vrácena hodnota (tedy pokud se záznam v mezipaměti nerovná hodnotě null), kód pouze nastaví proměnnou time (čas) s použitím dat uložených v mezipaměti.

    Pokud ale záznam v mezipaměti neexistuje (tedy pokud se rovná hodnotě null), kód nastaví hodnotu proměnné time (čas), přidá ji do mezipaměti a nastaví dobu vypršení platnosti na jednu minutu. Pokud stránka není znovu vyžádána během jedné minuty, je záznam z mezipaměti odstraněn. (Výchozí doba vypršení platnosti záznamu v mezipaměti je 20 minut.)

    Tento kód ilustruje schéma, kterého byste se při zapisování dat do mezipaměti měli vždy držet. Předtím, než z mezipaměti získáte nějakou hodnotu, nejdříve se vždy přesvědčte, zda metoda WebCache.Get (Webová mezipaměť.Získat) nevrátila hodnotu null. Mějte na paměti, že mohla vypršet platnost záznamu v mezipaměti nebo záznam mohl být odstraněn z jiných důvodů. Proto není nikdy zaručeno, že libovolný záznam v mezipaměti skutečně bude.

  3. Spusťte stránku WebCache.cshtml v prohlížeči. (Před jejím spuštěním ověřte, zda je stránka vybrána v pracovním prostředí Files – Soubory.) Při prvním vyžádání stránky časový údaj není v mezipaměti a kód jej musí do mezipaměti přidat.

    ch15caching-1

  4. Aktualizujte stránku WebCache.cshtml v prohlížeči. Tentokrát se časový údaj v mezipaměti nachází. Všimněte si, že čas se od posledního zobrazení stránky nezměnil.

    ch15caching-2

  5. Počkejte jednu minutu, dokud nebude mezipaměť vyprázdněna, a poté stránku aktualizujte. Stránka opět oznámí, že časový údaj nebyl v mezipaměti nalezen, a do mezipaměti bude přidán aktualizovaný čas.

Další materiály

Kapitola 7 – Zobrazení dat v grafu