Sdílet prostřednictvím


Přidání dynamického obsahu do stránky v mezipaměti (VB)

od Microsoftu

Zjistěte, jak na jedné stránce kombinovat dynamický obsah a obsah uložený v mezipaměti. Nahrazení mezipaměti po umožňuje zobrazit dynamický obsah, jako jsou bannerové reklamy nebo zprávy, na stránce, která byla uložena do mezipaměti.

Když využijete ukládání výstupu do mezipaměti, můžete výrazně zvýšit výkon aplikace ASP.NET MVC. Místo opakovaného vygenerování stránky pokaždé, když je stránka požadována, lze stránku vygenerovat jednou a uložit do mezipaměti pro více uživatelů.

Ale je tu problém. Co když potřebujete na stránce zobrazit dynamický obsah? Představte si například, že chcete na stránce zobrazit bannerovou reklamu. Nechcete, aby se bannerová reklama ukrácela do mezipaměti, aby se všem uživatelům zobrazovala stejná reklama. Takhle bys nevydělal žádné peníze!

Naštěstí existuje jednoduché řešení. Můžete využít funkci rozhraní ASP.NET označovanou jako náhrada po mezipaměti. Nahrazení po mezipaměti umožňuje nahradit dynamický obsah na stránce, která byla uložena v mezipaměti.

Za normálních okolností se při výstupu ukládání stránky do mezipaměti pomocí atributu <OutputCache> stránka ukládá do mezipaměti na serveru i v klientovi (webovém prohlížeči). Pokud použijete náhradu po uložení do mezipaměti, stránka se ukládá do mezipaměti pouze na serveru.

Použití nahrazení post-cache

Použití nahrazení po mezipaměti vyžaduje dva kroky. Nejprve musíte definovat metodu, která vrátí řetězec představující dynamický obsah, který chcete zobrazit na stránce uložené v mezipaměti. Dále zavoláte Metodu HttpResponse.WriteSubstitution() pro vložení dynamického obsahu na stránku.

Představte si například, že chcete náhodně zobrazit různé zprávy na stránce uložené v mezipaměti. Třída ve výpisu 1 zveřejňuje jednu metodu s názvem RenderNews(), která náhodně vrací jednu zprávu ze seznamu tří zpravodajských položek.

Výpis 1 – Models\News.vb

Public Class News

    Shared Function RenderNews(ByVal context As HttpContext) As String
        Dim newsItems As New List(Of String)
        newsItems.Add("Gas prices go up!")
        newsItems.Add("Life discovered on Mars!")
        newsItems.Add("Moon disappears!")

        Dim rnd As New Random()
        Return newsItems(rnd.Next(newsItems.Count))
    End Function

End Class

Pokud chcete využít náhradu po mezipaměti, zavolejte metodu HttpResponse.WriteSubstitution(). Metoda WriteSubstitution() nastaví kód, který nahradí oblast stránky uložené v mezipaměti dynamickým obsahem. Metoda WriteSubstitution() slouží k zobrazení náhodné zprávy v zobrazení v seznamu 2.

Výpis 2 – Views\Home\Index.aspx

<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="MvcApplication1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Index</title>
</head>
<body>
    <div>
    
    <% Response.WriteSubstitution(AddressOf News.RenderNews)%>
        
    <hr />
    
    The content of this page is output cached.
    <%= DateTime.Now %>

    </div>
</body>
</html>

RenderNews Metoda je předána WriteSubstitution() metoda. Všimněte si, že RenderNews Metoda není volána. Místo toho je odkaz na metodu předán WriteSubstitution() pomocí operátoru AddressOf.

Zobrazení indexu je uložené v mezipaměti. Zobrazení vrátí kontroler ve výpisu 3. Všimněte si, že akce Index() je opatřena atributem <OutputCache> , který způsobí, že zobrazení indexu se uloží do mezipaměti po dobu 60 sekund.

Výpis 3 – Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    <OutputCache(Duration:=60, VaryByParam:="none")> _
    Function Index()
        Return View()
    End Function

End Class

I když je zobrazení Index uložené v mezipaměti, zobrazí se při žádosti o stránku Index různé náhodné zprávy. Když požádáte o indexovou stránku, čas zobrazený stránkou se po dobu 60 sekund nezmění (viz obrázek 1). Skutečnost, že se čas nemění, dokazuje, že je stránka uložena v mezipaměti. Obsah vložený metodou WriteSubstitution() – náhodná položka zpráv – se však mění s každou žádostí .

Obrázek 1 – Vkládání dynamických zpravodajských položek na stránku v mezipaměti

clip_image002

Použití nahrazení po mezipaměti v pomocných metodách

Jednodušší způsob, jak využít náhradu po mezipaměti, je zapouzdření volání Metody WriteSubstitution() v rámci vlastní pomocné metody. Tento přístup je ilustrován metodou pomocné rutiny ve výpisu 4.

Výpis 4 – Helpers\AdHelper.vb

Imports System.Runtime.CompilerServices

Public Module AdHelper

    <Extension()> _
    Sub RenderBanner(ByVal helper As HtmlHelper)
        Dim context = helper.ViewContext.HttpContext
        context.Response.WriteSubstitution(AddressOf RenderBannerInternal)
    End Sub

    Private Function RenderBannerInternal(ByVal context As HttpContext) As String
        Dim ads As New List(Of String)
        ads.Add("/ads/banner1.gif")
        ads.Add("/ads/banner2.gif")
        ads.Add("/ads/banner3.gif")

        Dim rnd As New Random()
        Dim ad = ads(rnd.Next(ads.Count))
        Return String.Format("<img src='{0}' />", ad)
    End Function

End Module

Výpis 4 obsahuje modul jazyka Visual Basic, který zveřejňuje dvě metody: RenderBanner() a RenderBannerInternal(). Metoda RenderBanner() představuje skutečnou pomocnou metodu. Tato metoda rozšiřuje standardní ASP.NET třídu HtmlHelper MVC tak, aby bylo možné volat Html.RenderBanner() v zobrazení stejně jako jakoukoli jinou pomocnou metodu.

Metoda RenderBanner() volá metodu HttpResponse.WriteSubstitution() a předává metodu RenderBannerInternal() metody WriteSubstitution().

Metoda RenderBannerInternal() je privátní metoda. Tato metoda nebude zpřístupněna jako pomocná metoda. Metoda RenderBannerInternal() náhodně vrátí jeden obrázek bannerové reklamy ze seznamu tří obrázků bannerové reklamy.

Upravené zobrazení indexu ve výpisu 5 ukazuje, jak můžete použít pomocnou metodu RenderBanner(). Všimněte si, že v <horní části zobrazení je další direktiva %@ Import %> pro import oboru názvů MvcApplication1.Helpers. Pokud tento obor názvů nezapomenete importovat, pak se metoda RenderBanner() nezobrazí jako metoda u vlastnosti HTML.

Výpis 5 – Views\Home\Index.aspx (s metodou RenderBanner()

<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="MvcApplication1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Index</title>
</head>
<body>
    <div>
    
    <% Response.WriteSubstitution(AddressOf News.RenderNews)%>
    
    <hr />
    
    <% Html.RenderBanner()%>
    
    <hr />
    
    The content of this page is output cached.
    <%= DateTime.Now %>
    
    </div>
</body>
</html>

Když požádáte o stránku vykreslenou zobrazením v seznamu 5, zobrazí se u každé žádosti jiná bannerová reklama (viz Obrázek 2). Stránka je uložena v mezipaměti, ale banner inzerování je vložen dynamicky metodou pomocné rutiny RenderBanner().

Obrázek 2 – Zobrazení indexu zobrazující náhodnou bannerovou reklamu

clip_image004

Souhrn

Tento kurz vysvětluje, jak můžete dynamicky aktualizovat obsah na stránce uložené v mezipaměti. Zjistili jste, jak pomocí metody HttpResponse.WriteSubstitution() povolit vkládání dynamického obsahu na stránku v mezipaměti. Také jste zjistili, jak zapouzdřovat volání metody WriteSubstitution() v pomocné metodě HTML.

Kdykoli je to možné, využijte ukládání do mezipaměti – může to mít výrazný dopad na výkon vašich webových aplikací. Jak je vysvětleno v tomto kurzu, ukládání do mezipaměti můžete využít i v případě, že potřebujete na svých stránkách zobrazit dynamický obsah.