Caching in ASP.NET

اکثر صفحات در وب سایتهای پویا، پویا هستند. آنها صفحاتی هستند که از طریق درخواستهای کاربر ساخته شده اند. ما می دانیم که صفحات وب پویا به ما کمک می کنند تا محتوای پویا داشته باشیم، و درخواستهای کاربر را شخصی سازی کنیم ( مثل صفحه خانه کاربر). همچنین صفحات پویا به شما این اجازه را می دهند که بتوانید از طریق واکشی داده از منبع داده بدون نیاز به مدیر، برای تغییر در محتوای صفحه هر بار که چیزی در منبع داده تغییر کند، داده را واکشی کنید.
يکشنبه، 12 آبان 1387
تخمین زمان مطالعه:
موارد بیشتر برای شما
Caching in ASP.NET
Caching in ASP.NET
Caching in ASP.NET

مقدمه :

اکثر صفحات در وب سایتهای پویا، پویا هستند. آنها صفحاتی هستند که از طریق درخواستهای کاربر ساخته شده اند. ما می دانیم که صفحات وب پویا به ما کمک می کنند تا محتوای پویا داشته باشیم، و درخواستهای کاربر را شخصی سازی کنیم ( مثل صفحه خانه کاربر). همچنین صفحات پویا به شما این اجازه را می دهند که بتوانید از طریق واکشی داده از منبع داده بدون نیاز به مدیر، برای تغییر در محتوای صفحه هر بار که چیزی در منبع داده تغییر کند، داده را واکشی کنید. برا ی مثال می توان به لیست کتابها در یک وب سایت ناشر اشاره کرد. عیب این روش سربار در ساخت صفحه برای هر درخواست کاربر می باشد.
برای رفع این مشکل، بعضی از وب سیاتها، حاوی موتورهای ساخت صفحه هستند که آنها می توانند تمام صفحات را در آن واحد بسازند و آنها را بعنوان صفحات HTLM ذخیره کنند که بعد از آن به کاربر ارائه می شود. ولی این روش فقط به سناریوهای کمک خواهد کرد که محتوای صفحه برای تمام درخواستها یکی باشد، درست شبیه به دومین مثال بالا. حتی اگر لیست دسته بندی شده ای از کتابها بر مبنای مقادیر Id از طریق querystring فراهم شده باشد، خروجی صفحه برای یک دسته خاص از کتابها برای تمام کاربرها شبیه بهم است.
ASP.net از Caching استفاده می کند که به ما کمک خواهد کرد تا این مشکل را حل کنیم. Caching می تواند خروجی که توسط یک صفحه تولید شده را Cache کند ( در حافظه ذخیره کند) و برای درخواست آینده آن را ارائه دهد. باز این در دومین مثالی که زده شد در جایکه محتوای صفحه برای تمام درخواستها یکی باشد، کاربرد دارد. ویژگی Caching در روشهای متعدد قابل شخصی سازیست و ما با آن خواهیم پرداخت.

Cash کردن یک صفحه :

برای Cash کردن خروجی یک صفحه، ما باید OutputCache را درست در بالای صفحه مشخص کنیم. که در زیر آمده:

Caching in ASP.NET

همانطور که ملاحظه کردید، این روش دو خصوصیت دارند :
- Duration : زمان در واحد ثانیه که نشان میدهد برای چه مدت زمانی خروجی بایدCache شود. وقتیکه زمان به پایان برسد، خروجی Cache شده حذف می شود و محتوای صفحه برای درخواست بعدی تولید می شود.
- VaryByParam : این خصوصیت الزامی است و مشخص کننده پارامترهای querystring برای تغییر cache می باشد.
در قسمت کدهای بالا ما خصوصیت VaryByParam را با مقدار None مشخص کردیم و آن به این معنی است که محتوای صفحه بدون در نظر گرفتن پارامترهایی که از طریق querystring پاس داده شده، قابل ارائه است.
اگر دو درخواست به یک صفحه مشابه با تغییر دادن پارامترهای querystring باشد ، برای مثال : .../PageCachingByParam.aspx?id=12 and .../PageCachingByParam.aspx?id=15] و محتوای صفحه برای هر یک از آنها تولید شده باشد، مراحل انجام کار به شکل زیر است :

Caching in ASP.NET

محتوای صفحه برای دو درخواست، با زمانی که از طریق خصوصیت duration مشخص شده، Cache خواهد شد. برای مشخص کردن چندین پارامتر، از سمی کالون(;) برای جدا کردن آنها از هم استفاده کنید. اگر ما خصوصیت VaryByParam را بعنوان * تعیین کنیم، محتوای Cache شده برای تمام پارامترهای که از طریق querystring پاس داده شده تغییر خواهد کرد.
بعضی از صفحات محتوای متفاوتی را برای مرورگرهای مختلف تولید می کنند. در یک همچین مواقعی، قوانین خاصی برای تغییر دادن خروجی Cache برای مرورگرهای مختلف می باشد. دایرکتیو @OutputCache، باید به شکل زیر تغییر کند :

Caching in ASP.NET

Cache کردن قسمتی از صفحه :

گاهی اوقات ممکن است بخواهیم قسمتی از صفحه را Cache کنیم، برای مثال : ممکن است ما هدری برای صفحه مان داشته باشیم که برای تمام کاربرها یکسان باشد. ممکن است متن یا تصویری در هدر وجود داشته باشد که هر روز عوض می شود، در این مورد، ما می خواهیم هدری که Duration آن یک روز است را Cashe کنیم.
راه حل آن به این شکل است که، محتوای هدر را در User Control قرار دهیم و بعد مشخص نماییم که User control باید Cache شود. به این تکنیک fragment caching گویند.
برای اینکه مشخص کنیم که User control باید Cashe شود ما از دایرکتیو @OutputCache، به شکل زیر استفاده میکنیم.

Caching in ASP.NET

با دایرکتیو فوق، محتوای User Control برای زمان مشخص شده از طریق خصوصیت Duration، Cache خواهد شد {10 ثانیه}.
بدون توجه به پارامترهای querystring و نوع مرورگر یا ورژن آن، همان خروجی مشابه را خواهیم داشت.

Cache کردن داده :

ما می توانیم داده را در حافظه ذخیره کنیم و در صفحات مختلف یا برنامه های مختلفی آن را استفاده کنیم. این ویژگی با استفاده از کلاس Cache پیاده سازی می شود.
این Cache یک دوره حیاتی دارد که برابر است با دوره حیات برنامه. اشیاء می توانند بعنوان مقادیر زوج نام در Cache ذخیره شوند. یک مقدار String می تواند در Cache درج شود:

Caching in ASP.NET

مقادیر String ذخیره شده می توانند شبیه به این بازیابی شود.

Caching in ASP.NET

برای اینکه شیئ در Cache درج کنیم، می توانیم از متد ADD و یا یک متد Insert از کلاس Cache استفاده کنیم. این متدها به ما اجازه می دهند که از ویژگی های قدرتمند کلاس Cache استفاده کنیم. یکی از سربارگذاری های متد Insert به شکل زیر استفاده می شود:

Caching in ASP.NET

اولین دو پارامتری که وجود دارد کلید هستند و شیئ که می خواهد درج شود. سومین پارامتر از نوع CacheDependency است و به ما کمک می کند که dependency از این مقدار را به فایلی به نام Name.txt تنظیم کنیم، تا هر زمانی که این فایل تغییر کند، مقداری که درCache وجود دارد حذف می شود. ما می توانیم از Null برای نشان دادن هیچ گونه وابستگی یا Dependency استفاده کنیم. چهارمین پارامتر، زمان را مشخص می کند که چه موقع مقدار از Cache حذف شود. و آخرین پارامتر، sliding expiration parameter، نشان دهنده مدت زمانی از آخرین دستیابی به Cache ، که یک آیتم باید از Cache حذف شود.
Cache بصورت خودکار زمانی که حافظه سیستم کم باشد، آیتمی را که از همه کمتر استفاده شده، حذف می کند. که به این فرایند Acaveniging گویند. ما می توانیم برای آیتم ها در Cache مقادیر اولویت بندی خاصی را در نظر بگیریم تا از دیگر آیتم ها اولویت بالاتری داشته باشند.

Caching in ASP.NET

شمارش CacheItemPriority، اعضایی دارد که مقادیر اولولیت بندی به آن اختصاص می دهد. CacheItemPriority.High یک سطحی از اولویت به آیتمی اختصاص می دهد تا بندرت این آیتم از Cache حذف شود.

نقاط جذاب :

- متد Insert از کلاس Cache، روی هرگونه آیتمی که از قبل وجود داشته بازنویسی می کند.
- مقدار اولویت CacheItemPriority.NotRemovable می تواند با متد Cache.Insert برای تنظیم کردن سطح اولویت برای یک آیتم استفاده شود، تا در زمان scavenging از Cache حذف نشود.

مترجم : فرزاد شیرزاد



تصاوير زيبا و مرتبط با اين مقاله


نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
موارد بیشتر برای شما
از روایتِ ضعف تا اقدامِ قدرت؛ دکترین قرآنی-علویِ مدیریتِ روایت در جنگِ ترکیبی
از روایتِ ضعف تا اقدامِ قدرت؛ دکترین قرآنی-علویِ مدیریتِ روایت در جنگِ ترکیبی
روایت قدرت و انسجام ملی؛ تحلیل راهبردی پیام رهبر انقلاب در مسیر ایران قوی
روایت قدرت و انسجام ملی؛ تحلیل راهبردی پیام رهبر انقلاب در مسیر ایران قوی
پزشکیان نرخ سوم بنزین را اعلام کرد
play_arrow
پزشکیان نرخ سوم بنزین را اعلام کرد
شادی زنان والیبال ایران پس از تاریخ‌سازی و صعود به جمع چهار تیم برتر آسیا
play_arrow
شادی زنان والیبال ایران پس از تاریخ‌سازی و صعود به جمع چهار تیم برتر آسیا
کپسول گاز چطور کار می‌کند؟
play_arrow
کپسول گاز چطور کار می‌کند؟
نماینده مجلس: سپاه از سال ۶۶ برای بسته شدن تنگهٔ هرمز برنامه داشت
play_arrow
نماینده مجلس: سپاه از سال ۶۶ برای بسته شدن تنگهٔ هرمز برنامه داشت
افشاگر پنتاگون: نتانیاهو در خطر است؛ اسرائیل سابقه ترور رهبران خود را دارد
play_arrow
افشاگر پنتاگون: نتانیاهو در خطر است؛ اسرائیل سابقه ترور رهبران خود را دارد
گفتگوی الجزیره انگلیسی با مهدی طارمی
play_arrow
گفتگوی الجزیره انگلیسی با مهدی طارمی
روایت رهبر شهید انقلاب از شجاعت حاج قاسم در قلب محاصره دشمن
play_arrow
روایت رهبر شهید انقلاب از شجاعت حاج قاسم در قلب محاصره دشمن
گزارش فاکس‌نیوز درباره پرونده ایران که ترامپ را خشمگین کرد
play_arrow
گزارش فاکس‌نیوز درباره پرونده ایران که ترامپ را خشمگین کرد
شیعه جعفری ام / استوری ولادت امام صادق علیه السلام
play_arrow
شیعه جعفری ام / استوری ولادت امام صادق علیه السلام
شکست در تست اولیه پهپادهای ۳۵ میلیون دلاری کره جنوبی!
play_arrow
شکست در تست اولیه پهپادهای ۳۵ میلیون دلاری کره جنوبی!
حمله تند مجری آمریکایی به ترامپ
play_arrow
حمله تند مجری آمریکایی به ترامپ
ورود آقای قاضی به ماجرای دکل‌های مخابراتی و نگرانی‌های مردم
play_arrow
ورود آقای قاضی به ماجرای دکل‌های مخابراتی و نگرانی‌های مردم
دو کودک فلسطینی در محاصره آتش؛ تلاش برای زنده ماندن
play_arrow
دو کودک فلسطینی در محاصره آتش؛ تلاش برای زنده ماندن