۱۳۸۸/۰۲/۰۴

كش كردن اطلاعات غير پويا در ASP.Net - قسمت اول


در مورد افزونه YSlow افزونه Firebug فايرفاكس پيشتر صحبت شد. اين افزونه پس از آناليز يك سايت، پيشنهاداتي را نيز جهت بهبود سرعت، ارائه مي‌دهد.





همانطور كه در شكل بالا مشخص است، عناصري مانند css و js ، قسمت expires اشان (تاريخ منقضي شدن كش آن‌ها در سمت كلاينت) خالي است و پيشنهاد داده كه به هر كدام از اين عناصر، هدر مخصوص مشخص سازي مدت زمان كش شدن در سمت كلاينت اضافه شود.
ASP.Net در مورد كش كردن اطلاعات صفحات پويا به اندازه‌ي كافي امكانات در اختيار برنامه نويس قرار مي‌دهد اما در مورد اضافه كردن اين هدر جهت يك فايل css غير پويا شايد نتوان مطلب خاصي را يافت.
در IIS7 امكانات ويژه‌اي براي اين منظور در نظر گرفته شده كه نحوه استفاده از آن در ASP.Net به صورت زير است:
فايل وب كانفيگ سايت را باز كرده و به قسمت system.webServer چند سطر زير را اضافه كنيد:

<staticContent>
<clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />
</staticContent>

اين مورد فقط مختص به IIS7 است و بر روي نگارش‌هاي پايين‌تر كار نمي‌كند.
با اين كار، تاريخ منقضي شدن هر آنچه كه توسط موتور ASP.net سرو نمي‌شود به سال 2020 تنظيم خواهد شد. (كليه محتواي غيرپوياي سايت، اعم از تصاوير، فايلهاي css ، js و غيره)
پس از اين تنظيم مجددا YSlow را اجرا كرده و Performance Grade ايي را كه نمايش مي‌دهد بررسي نمائيد.

بديهي است اگر يكي از فايل‌هاي css يا js شما تغيير كند، كلاينت، اطلاعات جديدي را تا سال 2020 دريافت نمي‌كند. براي حل اين مشكل يك كوئري استرينگ ساده به انتهاي لينك مربوط به css‌ يا js‌ خود اضافه كنيد تا URL جديد با URL قبلي آن يكسان نباشد (اين كوئري استرينگ تاثيري روي محتواي ايستاي ما ندارد). به اين صورت اين آدرس جديد، مجددا دريافت شده و تا سال 2020 كش خواهد شد.

نكته:
اعمال تنظيم فوق، در IIS7 ويندوز سرور 2008 مجاز است؛ اما در IIS7 ويندوز ويستا قفل شده است و قابل override نيست. براي تغيير آن، فايل زير را پيدا كنيد:
open %systemroot%\System32\inetsrv\config\applicationHost.config
و در آن سطر
<section name="staticContent" overrideModeDefault="Deny" />
را به صورت زير تغيير دهيد تا مجاز به اعمال تغييرات شويد:
<section name="staticContent" overrideModeDefault="Allow" />
در قسمت بعد در مورد نگارش‌هاي پايين‌تر IIS توضيح داده خواهد شد.


مآخذ:
YSlow: Add expires header to images in IIS 7
IIS7: How to set cache control for static content?