Bagikan melalui


Menambahkan Konten Dinamis ke Halaman Singgahan (VB)

oleh Microsoft

Pelajari cara mencampur konten dinamis dan cache di halaman yang sama. Substitusi pasca-cache memungkinkan Anda menampilkan konten dinamis, seperti iklan banner atau item berita, dalam halaman yang telah di-cache output.

Dengan memanfaatkan penembolokan output, Anda dapat secara dramatis meningkatkan performa aplikasi MVC ASP.NET. Alih-alih meregenerasi halaman setiap dan setiap kali halaman diminta, halaman dapat dibuat sekali dan di-cache dalam memori untuk beberapa pengguna.

Tetapi, ada masalah. Bagaimana jika Anda perlu menampilkan konten dinamis di halaman? Misalnya, bayangkan Anda ingin menampilkan iklan spanduk di halaman. Anda tidak ingin iklan banner di-cache sehingga setiap pengguna melihat iklan yang sangat sama. Anda tidak akan menghasilkan uang dengan cara itu!

Untungnya, ada solusi yang mudah. Anda dapat memanfaatkan fitur kerangka kerja ASP.NET yang disebut substitusi pasca-cache. Substitusi pasca-cache memungkinkan Anda untuk mengganti konten dinamis di halaman yang telah di-cache dalam memori.

Biasanya, ketika Anda mengeluarkan cache halaman dengan menggunakan <atribut OutputCache> , halaman di-cache di server dan klien (browser web). Saat Anda menggunakan substitusi pasca-cache, halaman hanya di-cache di server.

Menggunakan Substitusi Pasca-Cache

Menggunakan substitusi pasca-cache memerlukan dua langkah. Pertama, Anda perlu menentukan metode yang mengembalikan string yang mewakili konten dinamis yang ingin Anda tampilkan di halaman yang di-cache. Selanjutnya, Anda memanggil metode HttpResponse.WriteSubstitution() untuk menyuntikkan konten dinamis ke halaman.

Bayangkan, misalnya, bahwa Anda ingin menampilkan item berita yang berbeda secara acak di halaman yang di-cache. Kelas di Listing 1 memaparkan satu metode, bernama RenderNews(), yang secara acak mengembalikan satu item berita dari daftar tiga item berita.

Daftar 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

Untuk memanfaatkan substitusi pasca-cache, Anda memanggil metode HttpResponse.WriteSubstitution(). Metode WriteSubstitution() menyiapkan kode untuk mengganti wilayah halaman yang di-cache dengan konten dinamis. Metode WriteSubstitution() digunakan untuk menampilkan item berita acak dalam tampilan di Daftar 2.

Daftar 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>

Metode RenderNews diteruskan ke metode WriteSubstitution(). Perhatikan bahwa metode RenderNews tidak dipanggil. Sebaliknya referensi ke metode diteruskan ke WriteSubstitution() dengan bantuan operator AddressOf.

Tampilan Indeks di-cache. Tampilan dikembalikan oleh pengontrol di Daftar 3. Perhatikan bahwa tindakan Index() dihiasi dengan <atribut OutputCache> yang menyebabkan tampilan Indeks di-cache selama 60 detik.

Daftar 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

Meskipun tampilan Indeks di-cache, item berita acak yang berbeda ditampilkan saat Anda meminta halaman Indeks. Saat Anda meminta halaman Indeks, waktu yang ditampilkan oleh halaman tidak berubah selama 60 detik (lihat Gambar 1). Fakta bahwa waktu tidak berubah membuktikan bahwa halaman di-cache. Namun, konten yang disuntikkan oleh metode WriteSubstitution() - item berita acak - berubah dengan setiap permintaan .

Gambar 1 – Menyuntikkan item berita dinamis di halaman yang di-cache

clip_image002

Menggunakan Substitusi Pasca-Cache dalam Metode Pembantu

Cara yang lebih mudah untuk memanfaatkan substitusi pasca-cache adalah dengan merangkum panggilan ke metode WriteSubstitution() dalam metode pembantu kustom. Pendekatan ini diilustrasikan oleh metode pembantu dalam Daftar 4.

Daftar 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

Daftar 4 berisi modul Visual Basic yang mengekspos dua metode: RenderBanner() dan RenderBannerInternal(). Metode RenderBanner() mewakili metode pembantu aktual. Metode ini memperluas kelas htmlHelper ASP.NET MVC standar sehingga Anda dapat memanggil Html.RenderBanner() dalam tampilan seperti metode pembantu lainnya.

Metode RenderBanner() memanggil metode HttpResponse.WriteSubstitution() yang meneruskan metode RenderBannerInternal() ke metode WriteSubstitution().

Metode RenderBannerInternal() adalah metode privat. Metode ini tidak akan diekspos sebagai metode pembantu. Metode RenderBannerInternal() secara acak mengembalikan satu gambar iklan banner dari daftar tiga gambar iklan banner.

Tampilan Indeks yang dimodifikasi di Daftar 5 menggambarkan bagaimana Anda dapat menggunakan metode pembantu RenderBanner(). Perhatikan bahwa direktif %@ Impor %> tambahan <disertakan di bagian atas tampilan untuk mengimpor namespace layanan MvcApplication1.Helpers. Jika Anda mengabaikan untuk mengimpor namespace layanan ini, maka metode RenderBanner() tidak akan muncul sebagai metode pada properti Html.

Daftar 5 – Views\Home\Index.aspx (dengan metode 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>

Saat Anda meminta halaman yang dirender oleh tampilan di Daftar 5, iklan banner yang berbeda ditampilkan dengan setiap permintaan (lihat Gambar 2). Halaman di-cache, tetapi iklan spanduk disuntikkan secara dinamis oleh metode pembantu RenderBanner().

Gambar 2 – Tampilan Indeks yang menampilkan iklan banner acak

clip_image004

Ringkasan

Tutorial ini menjelaskan bagaimana Anda dapat memperbarui konten secara dinamis di halaman yang di-cache. Anda mempelajari cara menggunakan metode HttpResponse.WriteSubstitution() untuk mengaktifkan konten dinamis untuk disuntikkan di halaman yang di-cache. Anda juga mempelajari cara merangkum panggilan ke metode WriteSubstitution() dalam metode pembantu HTML.

Manfaatkan penembolokan jika memungkinkan - dapat berdampak dramatis pada performa aplikasi web Anda. Seperti yang dijelaskan dalam tutorial ini, Anda dapat memanfaatkan penembolokan bahkan ketika Anda perlu menampilkan konten dinamis di halaman Anda.