AspNet.sk     Diskusné fóra     Vitajte v QuickStarts     ASP.NET     Silverlight     Ako môžem...? (en)     Class prehliadač Príklady chcem v ...   
Menu
Skip Navigation Links.
Späť na ASP.NET príručku

ASP.NET QuickStart Príručka

Page Fragment Caching

Okrem cachovania výstupu celej stránky, poskytuje ASP.NET pre Vás jednoduchý spôsob ako cachovať výstup z určitých častí obsahu stránky, ktorý je pomenovaný fragment caching. Určite si región Vašej stránky pomocou ovládacích prvkov, a označíte ich pre cachovanie použitím direktívy @ OutputCache predstavenej v predchádzajúcej kapitole. Táto direktíva určuje dobu trvania (v sekundách), počas ktorej by mal byť obsah ovládacieho prvku cachovaný na serveri, tak isto ako hocijaké iné prípadne podmienky, pri ktorých by malo dojsť k zmenám. Napríklad nasledujúca direktíva nariaďuje ASP.NET, aby cachoval výstup ovládacieho prvku po dobu 120 sekúnd, a obmeňuje cachovanie použitím dotazových reťazcov alebo formulárových parametrov "CategoryID" a "SelectedID".

<%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>

Atribút VaryByParam je extrémne výkonný a povoľuje autorovi ovládacieho prvku nariadiť ASP.NET cachovať/uchovať viaceré inštancie regiónu cachovaného výstupu na serveri. Napríklad nasledujúce URL na hostovanú stránku (host page) predošlého ovládacieho prvku vyrovnávacej pamäte oddeľujú inštancie obsahu ovládacích prvkov.

http://localhost/mypage.aspx?categoryid=foo&selectedid=0
http://localhost/mypage.aspx?categoryid=foo&selectedid=1

Logicky vrámci ovládacieho prvku je potom možné dynamicky vygenerovať rôzny obsah (ktorý je cachovaný oddelene) založený na poskytnutých argumentoch.

Namiesto atribútu VaryByParam, fragment caching taktiež podporuje atribút VaryByControl. Kde atribút VaryByParam obmeňuje cachované výsledky založené na pároch názov/hodnôt odoslaných použitím POST alebo GET, atribút VaryByControl obmeňuje cachované fragmenty prvkami vo vnútri ovládacích prvkov. Napríklad:

<%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %>

Všimnite si, že podobne ako v prípade stránok s cachovaným výstupom, je potrebné explicitné použite buď VaryByParam alebo VaryByControl aj v prípade, že žiadne nie je použité. Ak ovládací prvok obsahoval prvok drop-down select box pomenovaný Category, výstup ovládacieho prvku by sa obmeňoval podľa označenej hodnoty v ovládacom prvku.

Nasledujúca ukážka kódu objasňuje ako cachovať dve menu sekcie stránky použitím deklaratívneho ovládacieho prvku.


<%@ Page Language="VB" %>
<%@ Register TagPrefix="Acme" TagName="Menu" Src="Menu.ascx" %>

<html>
  <body>
    <table>
      <tr>
        <td>
          <Acme:Menu Category="LeftMenu" runat=server/>
        </td>
        <td>
          <h1>Hi, the time is now: <%=Now%> </h1>
        </td>
        <td>
          <Acme:Menu Category="RightMenu" runat=server/>
        </td>
      <tr>
    </table>
  </body>
</html>
VB

Nasledujúca ukážka kódu ukazuje implementáciu ovládacieho prvku "Acme:Menu" s podporou cachovania.


<%@ Control Language="VB" ClassName="AcmeMenu" %>
<%@ OutputCache Duration="120" VaryByParam="none" %>

<script runat=server>

    Public Category As String;

    Sub Page_Load(sender As Object, e As EventArgs)

        Dim conn As AdoConnection = New AdoConnection("MyDSN")

        MyMenu.DataSource = conn.Execute("select * from menu where category=" & Category)
        MyMenu.DataBind()
    End Sub

</script>

<asp:datagrid id="MyMenu" runat=server/>
VB

Všimnite si, že výstup tohoto príkladu cachuje odozvu každého ovládacieho prvku po dobu 120 sekúnd. Celá logika potrebná pre opätovné vytvorenie každého ovládacieho prvku menu počas pochybenia vyrovnávacej pamäte (buď kvôli uplynutiu 120 sekúnd alebo kvôli nedostatočnej pamäti na serveri) je čisto uzavretá vo vnútri ovládacieho prvku.

Nasledujúci príklad ukazuje jednoduchý fragment caching. Ukážka cachuje výstup z ovládacieho prvku, ktorý vyvoláva dáta z databázy SQL Servera, zatiaľ čo si ponecháva dynamické vlastnosti rodičovskej stránky. Môžete vidieť, že stránka je dynamická, pretože čas je aktualizovaný pri každej požiadavke, zatiaľ čo ovládací prvok je aktualizovaný každých 60 sekúnd.

VB Fragment Cache
Run Sample View Source

Poznámka: Pokusy programovo ovplyvňovať ovládacie prvky, ktorých výstup je cachovaný, zo stránky, ktorá ich obsahuje má za výsledok chybu. Napríklad pokusy použiť deklaratívny výraz pripájania dát (data binding expression) v tagu ovládacieho prvku generujú syntaktické chyby (parser errors), ako je ukázané v nasledujúcom kóde.

<!-- The following tags generate parser errors. -->
<Acme:Menu Category='<%# Container.DataItem("Category")'  runat="server"/>

Dôvod je jednoduchý. V prípadoch, keď je výstup obsahu ovládacích prvkov cachovaný, je vytvorená inštancia ovládacieho prvku iba pri prvej požiadavke; teda po cachovaní už nie je ovládací prvok prístupný. Namiesto toho by ste mali uzavrieť celú logiku potrebnú pre vytvorenie obsahu ovládacieho prvku priamo do samotného ovládacieho prvku; toto je zvyčajne vykonávané v rámci udalosti Page_Load alebo Page_PreRender ovládacieho prvku.

Môžete deklarovať a použiť iné parametre deklaratívnych vlastností pre prispôsobenie. Napríklad predošlé ovládacie prvky môžu byť prispôsobené nasledovne:

<Acme:Menu Category="LeftMenu" runat=server/>
<Acme:Menu Category="RightMenu" runat=server/>

Tieto deklarácie zapríčinia, aby bol príslušný kód vygenerovaný a spustený kompilátorom (compiler) stránky počas udalosti, v ktorej je ovládací prvok vytvorený ako chyba vyrovnávacej pamäte. Vývojári ovládacích prvkoch potom môžu sprístupniť tieto nastavenia ako keby boli tieto ovládacie prvky necachované.

Fragment Caching API Novinka v 2.0

Namiesto používania direktívy @ OutputCache, teraz môžete nastaviť cachovacie vlastnosti pre ovládacie prvky použitím Cache API. V nasledujúcom príklade obmeňuje ovládací prvok čas, kedy bol cachovaný, podľa označeného stavu v dropdown liste. Môžete vidieť čas, kedy bol ovládací prvok vrátený a čas, kedy bude cachovaný záznam odstránený.

VB Fragment Cache API
Run Sample View Source
Microsoft .NET Framework SDK QuickStart Tutorials Version 2.0
Copyright © 2005 Microsoft Corporation. All rights reserved.
Preklad do slovenského jazyka - Copyright © 2005 - 2007 www.aspnet.sk, www.qsh.sk
Pošlite komentár k tejto stránke
Copyright © 2002 - 2008 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.