عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش ششم) |
مديريت وب |
9398 |
8 |
4.5 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
افزايش كارآيی برنامه های وب در ASP.NET 2.0
افزايش كارآئی برنامه های وب در ASP.NET 2.0
(بخش ششم)
آنچه تاكنون گفته شده است :
-
بخش
های
اول و
دوم
: اشاره به مجموعه ای از نكات كه رعايت آنها در زمان طراحی می تواند زمينه پياده
سازی يك برنامه وب كارآ را فراهم نمايد .
-
بخش
سوم
: معرفی برخی ابزارها برای تست برنامه های وب
-
بخش
چهارم :
مفاهيم اوليه caching ، روش های
caching در ASP.NET ، نحوه استفاده از
output caching
-
بخش
پنجم :
Caching و Query string
در اين بخش
بحث خود را در ارتباط با output caching ادامه
داده و بر روی
Custom Caching Control متمركز خواهيم شد.
Custom Caching Control
برای ذخيره چندين نسخه cache از يك صفحه
تنها گزينه موجود استفاده از پارامترهای query string
نمی باشد . ASP.NET به پياده كنندگان
برنامه های وب امكان ايجاد رويه هائی سفارشی را می دهد كه به كمك آنها می
توان در خصوص
caching يك نسخه جديد از يك صفحه و يا استفاده از نسخه موجود تصميم گيری كرد
.
كد نوشته شده در هر يك از رويه های فوق مناسب بودن اطلاعات را بررسی و يك رشته را
برمی گرداند . در ادامه ، ASP.NET از رشته فوق برای
پياده سازی caching استفاده می نمايد. در صورتی كه كد مورد
نظر رشته مشابهی را برای درخواست های مختلف توليد نمايد ،
ASP.NET از نسخه cache شده صفحه استفاده
خواهد كرد و در صورتی كه كد فوق يك مقدار جديد را توليد نمايد ،
ASP.NET يك نسخه جديد cache را ايجاد و آن را
بطور جداگانه ذخيره می نمايد .
به عنوان نمونه فرض كنيد قصد داريم نسخه های مختلفی از يك صفحه را بر اساس نوع
مرورگر cache نمائيم . بدين منظور در ابتدا از دايركتيو
OutputCache در ابتدای صفحاتی كه قصد
caching آنها را داريم استفاده كرده و در ادامه از خصلت
VaryByCustom برای مشخص كردن يك نام كه نوع caching
سفارشی را مشخص می نمايد ، استفاده می نمائيم .
با توجه به اين كه قصد داريم صفحات بر اساس مرورگر كاربران
cache نمائيم ، در نمونه كد زير از نام Browser
استفاده شده است .
<%@ OutputCache Duration="10"
VaryByParam="None" VaryByCustom="Browser" %> |
در ادامه نياز داريم
رويه ای را كه رشته سفارشی caching را توليد می نمايد ،
ايجاد نمائيم . رويه فوق می بايست در فايل پيكربندی global.asax
و يا فايل code-behind
مربوطه باشد .
كد زير نحوه انجام اين كار را نشان می دهد .
رويه ای برای ايجاد
سفارشی چندين نسخه cache از يك صفحه |
Function
GetVaryByCustomString(ByVal context As HttpContext, ByVal arg As String) As
String
If arg = "Browser"
Dim BrowserName As String
BrowserName = Context.Request.Browser.Browser
Return BrowserName
Else
Return MyBase.GetVaryByCustomString(context, arg)
End If
End Function
|
تابع
GetVaryByCustomString يك رشته با مقدار VaryByCustom
را از طريق پارامتر
arg دريافت می نمايد .
بدين ترتيب می توان برنامه ای را پياده سازی نمود كه چندين نوع از
caching سفارشی را صرفا" در يك تابع مشابه پياده سازی
نمايد . هر نوع از يك نام VaryByCustom مختلف استفاده می نمايد ( نظير Browser ،
BrowserVersion و يا DayOfWeek
) . تابع فوق مقدار VaryByCustom را از طريق آرگومان arg
مشاهده و رشته caching مناسب را برمی گرداند . در صورتی
كه رشته های caching برای درخواست های مختلف مطابقت
نمايد ، ASP.NET از نسخه cache
شده صفحه استفاده می نمايد.
در غير اينصورت ASP.NET برای هر رشته
caching يك نسخه جداگانه را ايجاد
، ذخيره و cache می نمايد .
دايركتيو OutputCache دارای يك خصلت سوم است كه از آن
برای تعريف
caching استفاده
می گردد . خصلت فوق كه VaryByHeader نام دارد ، به شما اجازه می دهد كه نسخه هائی
جداگانه از يك صفحه را بر اساس مقدار دريافتی يك HTTP header ذخيره
نمائيد . در اين رابطه می توان
صرفا" يك header و يا مجموعه ای header كه توسط
semicolon از يكديگر جدا شده اند را مشخص نمود . سايت های چند زبانی می
توانند از روش
فوق برای caching چندين نسخه از يك صفحه بر اساس زبان
مرورگر سرويس گيرنده استفاده نمايند .
كد زير نحوه استفاده از خصلت VaryByHeader را نشان می دهد .
<%@ OutputCache Duration="20"
VaryByParam="None" VaryByHeader="Accept-Language" %> |
Fragment Caching
در برخی موارد ممكن است
نتوان تمامی يك صفحه را cache نمود ولی همچنان اصرار
داريم كه بخشی از صفحه را كه بندرت تغيير می يابد ( نظير ليست كالاهای موجود ) و
هزينه زيادی صرف ايجاد آن شده است را cache نمائيم . در
چنين مواردی می توان از روش های متعددی نظير data caching
( در بخش بعد اين مقاله با روش استفاده از آنها آشنا خواهيم شد ) و fragment
Caching استفاده كرد .
برای پياده سازی fragment Caching می بايست برای بخشی از صفحه كه قصد
caching آن را داريم يك كنترل كاربر را ايجاد و دايركتيو
OutputCache را به آن اضافه كرد . بدين ترتيب علی رغم اين كه صفحه
cache نخواهد شد ولی كنترل كاربر
cache می گردد .
fragment Caching از لحاظ مفهومی مشابه caching
يك صفحه است و صرفا" دارای يك تفاوت اساسی است . در صورتی كه صفحه يك نسخه
cache شده از يك كنترل كاربر را بازيابی نمايد ، نمی
تواند با آن و از طريق كد ارتباط برقرار نمايد . به عنوان نمونه در صورتی كه كنترل
كاربر خصلت هائی خاص را ارائه می نمايد ، صفحه وب مورد نظر نمی تواند به اين خصلت
ها دستيابی و آنها را تغيير دهد . توجه داشته باشيد ، زمانی كه از يك نسخه
cache شده كنترل كاربر استفاده می گردد ، يك بلاك از تگ
های Html درون صفحه قرار خواهند گرفت و در عمل شی كنترل
كاربر در دسترس نخواهد بود .
Cache Profiles
يكی از مسائل در ارتباط با output caching
قرار دادن كد درون صفحه است ( در بخش aspx markup
. و يا در بخش كد كلاس ) . با اين كه استفاده و
پيكربندی خصلت های مرتبط با دايركتيو OutputCache در صفحات وب ساده تر بنظر می آيد
ولی اين روش می تواند مسائل مديريتی و پشتيبانی مختص به خود را نيز به دنبال داشته
باشد (خصوصا" اگر ده ها صفحه cache شده ايجاد شده
باشد ) . به عنوان نمونه در صورتی كه قصد داشته باشيم تغييراتی را در خصوص
caching تمامی صفحات فوق انجام دهيم ( مثلا" تغيير مدت
زمان caching از 30 ثانيه به 60 ثانيه ) ، می بايست هر
صفحه بطور جداگانه تغيير و در ادامه نيز توسط ASP.NET
مجددا" ترجمه گردند .
در ASP.NET 2.0 با معرفی يك راهكار جديد اين امكان در
اختيار پياده كنندگان گذاشته شده است تا بتوانند از تنظيمات
caching مشابه برای گروهی از صفحات استفاده نمايند . به ويژگی فوق
cache profile می گويند و به كمك آن می توان تنظيمات
caching را در يك فايل web.config
تعريف نمود . بدين ترتيب ، اعمال تغييرات صرفا" از طريق يك نقطه فراهم می گردد .
برای تعريف يك Cache Profile
، از تگ <add> در بخش
<outputCacheProfiles> فايل web.config استفاده
می گردد . به cache profile ايجاد شده يك نام و مدت زمان
مناسب نسبت داده می شود . كد زير نحوه انجام اين كار را نشان می دهد .
تعريف يك
cache profile در فايل web.config
|
<configuration>
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="ProductItemCacheProfile" duration="60" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
...
</system.web>
</configuration> |
در ادامه می توان
از
پروفايل فوق به كمك خصلت
CacheProfile در يك صفحه استفاده نمود .
<%@ OutputCache
CacheProfile="ProductItemCacheProfile" VaryByParam="None" %> |
در صورتی كه بخواهيم
ساير جزئيات caching نظير VaryByParam را
نيز مشخص نمائيم می توان آن را به عنوان يك خصلت در دايركتيو OutputCache
و يا
تگ <add> در پروفايل مشخص نمود .
Output Caching در يك سرويس وب
از Output Caching می توان برای متدهای جداگانه در يك سرويس وب نيز
استفاده كرد . برای انجام اين كار ، لازم است كه مقدار CacheDuration به WebMethod
و قبل از تعريف متد اضافه
گردد . كد زير نتايج يك متد وب را به مدت 30 ثانيه
cache می نمايد .
<WebMethod(CacheDuration:=30)> _
Public Function MyMethod(ByVal myParameter As Integer) As String
...
End Function |
با توجه به اتمام بحث
Output caching و روش های مختلف بكارگيری آن در برنامه های وب ،
در بخش
هفتم به بررسی data
caching خواهيم پرداخت .