TOC

This article has been localized into Hungarian by the community.

Gyorsítótárazás:

OutputCache

Az ASP.NET WebFormsban és a Core keretrendszer előtti ASP.NET MVC verziókban még létezett az OutputCache fogalma. Ez megkönnyítette egész oldalak/nézetek gyorsítótárazását, hasonló módon, ahogy azt a ResponseCache-sel kapcsolatban láttuk, de a webszerver memóriájában tárolva.

A cikk írása idején az OutputCache koncepció még nem kapott helyet a .NET keretrendszer Core verziójában. Szerencsénkre létezik egy közösség fejlesztette csomag, memórián belüli gyorsítótárazással, ami ugyanazokat a lehetőségeket nyújtja, mint a régebbi verziókban található OutputCache. Tulajdonképpen több implementációja is létezik, ezt a cikket én a WebEssentials.AspNetCore.OutputCaching Nuget csomagra alapozom.

Ha telepítetted a csomagot a projektedbe, már csak egy pár apróbb változtatást kell eszközölni a Startup.cs fájlban, hogy használhasd az OutputCache direktívát:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
services.AddOutputCaching();    
services.AddMvc();    
    }
   
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
app.UseOutputCaching();    
app.UseMvcWithDefaultRoute();
    }
}

A lényegi munka a services.AddOutputCaching() és a app.UseOutputCaching() sorokban történik. Így már a weblapod támogatja a kimeneti gyorsítótárazást, amit így kezdhetsz használni:

[OutputCache(Duration = 120)]
public IActionResult Index()
{    
...

Ezzel az oldal a webszerver memóriájában marad 120 másodpercig, generálva csak az első kérés során lesz (legközelebb csak akkor, amikor a gyorsítótár lejár). Ha ezt magad is ellenőrizni szeretnéd, akkor vagy állítasz egy töréspontot az akcióban/metódusban és elindítod a projektet, vagy adsz a metódusnak egy DateTime példányt és megjeleníted azt egy nézetben:

Vezérlő:

[OutputCache(Duration = 120)]
public IActionResult Index()
{    
    return View(DateTime.Now);
}

Nézet:

@model DateTime

Time of request: @Model.ToString()

Próbálj meg lekérni egy oldalt és észreveheted, hogy a dátum és idő ugyanaz marad akkor is, ha frissíted az oldalt, amíg a gyorsítótár le nem jár.

OutputCache beállítások

Egy fontos beállítást már használtunk az OutputCache használatakor: a Durationt (időtartamot). Ez jelzi a keretrendszernek, hogy meddig hagyatkozhat a gyorsítótárazott verzióra újragenerálás előtt. Vannak azonban más fontos beállítások is:

VaryByParam

Ha a Durationön kívül nincsenek más beállítások, akkor a kérés mindenképp gyorsítótárazva lesz, de sok helyzetben változni fog az oldalad attól függően, hogy a felhasználó hogyan fér hozzá. Ha például query string paraméterekre hagyatkozol más-más tartalom megjelenítésére, például így:

/Users/Details?id=1
/Users/Details?id=2
....

Ebben az esetben alighanem szeretnéd, ha a gyorsítótárazás figyelembe venné az "id" paramétert a tartalom tárolásakor. Ezt a legkönnyebben a VaryByParam opcióval tudod elérni:

[OutputCache(Duration = 120, VaryByParam = "id")]
public IActionResult Details(int id)
{
    return View(id);
}

Ezzel a Details nézet több verziója is létezhet a gyorsítótárban, attól függően, hogy milyen értéket kapott az id paraméter. Több paraméternevet is megadhatsz:

[OutputCache(Duration = 120, VaryByParam = "id,page,time")]
public IActionResult Details(int id)
{
...

VaryByHeader

A tartalmat megkülönböztetheted a kliens által a szervernek küldött fejlécek alapján is, mint amilyen a "User-Agent", ami a klienst (egy böngészőt) azonosít. Ezt pedig így használhatod:

[OutputCache(Duration = 120, VaryByHeader = "User-Agent")]
public IActionResult Index()
{    
    return View(DateTime.Now);
}

Ez az alapján különbözteti meg a gyorsítótárazandó tartalmat, hogy melyik böngésző adta le a bejövő kérést, és persze sok más fejléc is van, amit használhatsz - inspirációért tekintsd meg a HTTP fejlécek listáját.

Összefoglalás

Az OutputCaching NuGet csomaggal ismét használhatod az ASP.NET WebFormsban és az MVC keretrendszer korábbi verzióiban található OutputCache funkcionalitást.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!