ورود

View Full Version : چگونه بخش هایی از صفحات را Cache کنیم



Wily_Fox
سه شنبه 15 مرداد 1392, 15:26 عصر
با سلام و خسته نباشید

چندتا سوال داشتم اگه امکانش هست پاسخ دهید:

1- جهت کش کردن بخش های صفحات، چگونه تشخیص دهیم که چه قسمتهایی را بایستی کش کنیم؟

2- آیا جهت کش کردن می بایستی اون بخش رو در یک Action جداگانه نوشت و بمراتب PartialView آنرا Render کرد؟

یعنی اینکه یه Action به فرم زیر بنویسیم

[HttpGet]
[OutputCache(Duration = 86400, VaryByParam = "none")]
public ActionResult MenuBottom()
{
return PartialView("_MenuBottomPartial");
}


و همچنین کد زیر را داخل یه PartiaView ذخیره کنیم


<div id="footer">
<div id="footer_menu">
@Html.ActionLink("صفحه اصلی", "Index", "Home") |
@Html.ActionLink("قوانین", "Index", "Home") |
@Html.ActionLink("تبلیغات", "Index", "Home") |
@Html.ActionLink("خدمات", "Index", "Home") |
@Html.ActionLink("ارتباط با ما", "Index", "Home") |
@Html.ActionLink("راهنما", "Index", "Home")
</div>
<div id="BottomNote">کلیه محتوای اتوسط کاربران درج شده است هیچ مسئولیتی نسبت به آنها ندارد.</div>
<div id="copyrights">&copy; @DateTime.Now.Year</div>
</div>


و در _Layout بشکل زیر Render کنیم

@{Html.RenderAction("MenuBottom", "Home");}


3- در اینصورت بنظرم کش کردن مثال بالا بهینه نیست!!

چون باعث میشه 2 بار سازنده کلاس فرآخوانی بشه. از طرفی اگه از db استفاده کرده باشیم 2بار سازنده dbContext فرآخوانی خواهد شد


متشکرم از راهنمایی هاتون

hakim22
چهارشنبه 16 مرداد 1392, 08:48 صبح
بر چه اساس میگید که دوبار سازنده ی کلاس فراخوانی میشه !؟
یک BreakPoint در Action بزارید و بررسی کنید.

Wily_Fox
چهارشنبه 16 مرداد 1392, 10:28 صبح
دقیقا همین کار رو کردم. بررسی کردم دیدم یکبار واسه Index سازنده فراخوانی میشه و یکبار هم واسه Render کردن MenuBottom سازنده فراخوانی میشه.
خوب چون من از سرویسها استفاده می کنم در نتیجه سازنده کنترلر با IUnitOfWork سر و کار داره

در واقع به ازای هر Render یکبار سازنده اون کلاس فراخوانی میشه. خوب اینکه دیگه بهینه نیست. ما خواستیم ابرو رو درست کنیم زدیم یارو کور کردیم...