This article has been localized into Hungarian by the community.
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.