|
عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
|
افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش چهارم) |
مديريت وب |
4019 |
4 |
3.5 |
افزايش كارآيی برنامه های وب در ASP.NET 2.0
افزايش كارآئی برنامه های وب در ASP.NET 2.0
(بخش چهارم)
در
بخش
های
اول و
دوم به
مجموعه ای از نكات اشاره گرديد كه رعايت آنها در زمان طراحی می تواند زمينه پياده
سازی يك برنامه وب كارآ را فراهم نمايد . در بخش
سوم به امكانات و ابزارهای
موجود برای تست برنامه های وب
اشاره گرديد. در اين بخش به بررسی
امكانات
caching در ASP.NET 2.0 خواهيم پرداخت .
مفاهيم اوليه Caching
Caching از جمله واژه های كاملا" آشنا در
عرصه فناوری اطلاعات و ارتباطات است . اين واژه ريشه فرانسوی دارد و به معنی ذخيره
سازی است . در دنيای پردازش اطلاعات ، به ذخيره اطلاعات برای استفاده آتی اطلاق می گردد .در
واقع ، Caching فرآيندی است كه بر اساس آن داده با فركانس استفاده بالا به منظور
پاسخ به درخواست های بعدی ذخيره می گردد. اطلاعات ذخيره شده ممكن است
در آينده مجددا" استفاده گردند
و يا اين احتمال وجود خواهد داشت كه هرگز
شرايط استفاده مجدد از آنها فراهم نگردد . بنابراين Cache
صرفا" زمانی مفيد
خواهد بود كه هزينه ذخيره اطلاعات كمتر از هزينه
بازيابی و يا محاسبه مجدد
آنها باشد .
امروزه از
مفهوم Caching در زمينه
های متعددی در سيستم های كامپيوتری و شبكه ای استفاده می گردد . پردازنده های
كامپيوتر دارای
cache اختصاصی برای داده و دستورالعمل ها می باشند .
سيستم های عامل دارای
بافرهای cache برای سيستم های فايل و درايوها می باشند .
سيستم های فايل توزيع شده ( شبكه ای ) نظير
NFS ( برگرفته شده از network file system ) و AFS
( برگرفته شده از Andrew File System ) برای بهبود كارآئی
خود از cache استفاده می
نمايند . روترهای بكارگرفته شده در ستون فقرات شبكه اينترنت مسيرهائی را كه اخيرا"
از آنها استفاده كرده اند ،
cache می نمايند . سرويس دهندگان
DNS ، ماحصل فرآيند ترجمه نام به آدرس را
جهت استفاد آتی cache
می نمايند .
برنامه های كامپيوتری خصوصا" برنامه های وب نيز از اين فناوری در ابعاد گسترده ای
استفاده می نمايند تا بتوانند با سرعت بيشتر پاسخگوی نياز كاربران و مخاطبان خود
باشند . به عنوان نمونه ، مرورگر با ارائه پتانسل های لازم سمت سرويس گيرنده امكان
caching متن و يا تصاوير را فر اهم می نمايد و در سمت سرويس دهنده با استفاده از
امكانات متعددی می توان بهترين گزينه caching را به
منظور افزايش كارائی انتخاب كرد.
در صورتی كه از
روش هائی مناسب به منظور پياده سازی سيستم Caching
در برنامه های كامپيوتری استفاده گردد ، كارائی و توانمندی
آنها در جهت ارائه خدمات به
كاربران بطرز محسوسی افزايش
خواهد يافت .
روش
های caching
در ASP.NET
با عرضه ASP.NET 2.0 تحولات گسترده ای در
خصوص cache ايجاد گرديد . پياده كنندگان برنامه های وب
با آشنائی و بكارگيری پتانسيل های موجود می توانند برنامه های وب با كارآئی مطلوب
را پياده سازی نمايند .
در ASP.NET از دو نوع سيستم caching
استفاده می گردد . پياده كنندگان برنامه های وب می توانند و شايد بهتر باشد بگوئيم
می بايست از دو سيستم فوق در جهت افزايش كارآئی برنامه های خود استفاده نمايند ،
چراكه دو سيستم فوق مكمل يكديگر می باشند .
-
Output caching ، ساده ترين روش
caching است . صفحات aspx
. بر اساس فرآيندی در سمت سرويس دهنده ترجمه و پس از اجراء
، ماحصل خروجی آنها به
صورت يك صفحه html برای سرويس گيرنده ارسال می گردد . در
اين روش يك نسخه
نهائی از صفحه ترجمه شده html كه
برای سرويس گيرنده ارسال شده است ، cache می گردد . بدين
ترتيب ، زمانی كه سرويس گيرنده بعدی درخواست خود برای استفاده از اين صفحه را برای
سرويس دهنده ارسال
می نمايد ، در مقابل اجرای صفحه و توليد خروجی لازم ( انجام
پردازش های سمت سرويس دهنده با توجه به ماهيت و جايگاه عملكردی يك صفحه در يك
برنامه وب ) ، صفحه ترجمه شده html بطور اتوماتيك
برای وی
ارسال می گردد . بدين ترتيب ، مدت زمانی كه لازم است صفحه به همراه كد درون آن
ترجمه و اجراء گردد بطور كامل حذف می گردد .
-
Data caching : برای استفاده از اين روش می بايست
بطور دستی و از طريق كد
شرايط آن را فراهم نمود . پياده كنندگان
می توانند بخش های مهمی از اطلاعات را كه زمان زيادی صرف ساختن آنها شده است ( نظير يك
DataSet بازيابی شده از يك بانك اطلاعاتی ) را در
cache ذخيره نمايند . در ادامه ، ساير صفحات می
توانند وجود اين اطلاعات را بررسی و در صورت
موجود بودن در cache
از آنها استفاده نمايند . بدين ترتيب ، مراحل مورد نياز برای بازيابی اطلاعات حذف
خواهد شد .
روش فوق از لحاظ مفهومی شباهت زيادی به استفاده از application
state دارد ولی دارای قابليت های بيشتری در سمت سرويس دهنده است . به عنوان
نمونه زمانی كه حجم داده بگونه ای زياد گردد كه كارآئی يك برنامه را تحت تاثير قرار
دهد ، آيتم های موجود در cache بطور اتوماتيك از
cache حذف خواهند شد . برای
ذخيره آيتم ها در
cache می توان يك تاريخ را
مشخص تا پس از سپری شدن زمان مورد نظر بطور اتوماتيك از حافظه حذف گردند .
علاوه بر روش های كلی
فوق ، دو نوع خاص
ديگر از caching بر اساس مدل های اشاره شده نيز ايجاد
شده است :
-
Fragment caching : روش فوق نوع خاصی از output
caching است و در مقابل caching كد
Html برای تمامی صفحه ، صرفا" بخش هائی خاص از كد cache
می گردد. در اين
روش خروجی كد ترجمه شده Html مربوط به يك كنترل كاربر بر
روی يك صفحه ذخيره می گردد . بدين ترتيب در صورت اجراء مجدد صفحه ، كد
موجود در صفحه اجراء
می گردد و ضرورتی به اجراء كد مرتبط با كنترل كاربر نخواهد بود .
-
Data source caching : اين نوع
caching بر اساس كنترل های منبع داده ايجاد و
شامل كنترل های منبع داده ObjectDataSource ، SqlDataSource و XmlDataSource
می باشد.
از لحاظ فنی ، در روش فوق از data caching استفاده می
گردد. تنها تفاوت موجود در
اين رابطه ، عدم نياز به انجام پردازش های مورد نياز توسط پياده كننده است . بدين
منظور لازم است كه برخی خصلت ها و پيام های كنترل منبع داده كه مسئوليت ذخيره و
بازيابی caching را برعهده دارند ، توسط پياده كنندگان
پيكربندی گردد.
در اين بخش و ساير بخش
های بعدی به ترتيب به
بررسی موارد زير خواهيم پرداخت :
-
output caching
-
data caching
-
caching در كنترل های منبع داده
-
SQL cache dependency
نحوه استفاده از
output caching
با استفاده از output caching ، نسخه نهائی كد ترجمه شده
Html صفحه cache می گردد .
زمانی كه صفحه مجددا" و توسط كاربر ديگر درخواست می گردد ، اشياء ايجاد
نخواهند شد . همچنين ، چرخه حيات صفحه آغاز نخواهد شد و هيچگونه كدی اجراء
نمی گردد . در مقابل ، كد cache شده در
اختيار متقاضيان بعدی قرار داده
می شود . با توجه به اين كه در
روش output
caching هزينه های بالا سری كد
( پردازش های اضافه ) حذف می گردد ،
كارآئی برنامه بطرز محسوسی افزايش خواهد يافت .
برای آشنائی با نحوه عملكرد output caching ، كد زير را كه زمان
و تاريخ جاری سيستم را در
خروجی نشان می دهد ، بررسی می نمائيم .
|
<%@ OutputCache Duration="20"
VaryByParam="None" %>
<script runat="server">
sub Page_Load(sender as Object, e as EventArgs)
lblDate.Text = "The time is now:<br />"
lblDate.Text &= DateTime.Now.ToString()
end sub
</script>
<asp:Label id="lblDate" runat="server" /> |
متداولترين روش caching يك صفحه ASP.NET
، درج دايركتيو OutputCache در ابتدای فايل
aspx . است . كد زير نحوه استفاده از دايركتيو فوق
را نشان می دهد :
|
<%@ OutputCache Duration="20"
VaryByParam="None" %> |
در
دايركتيو فوق از دو
خصلت Duration و VaryByParam استفاده شده
است . خصلت Duration به
ASP.NET اعلام می نمايد كه صفحه را به مدت 20 ثانيه
cache نمايد. خصلت VaryByParam ميزان وابستگی فرآيند
caching را به يك و يا چندين پارامتر مشخص می نمايد . در
برخی موارد ممكن است اين وابستگی مهم نباشد و مقدار آن None
در نظر گرفته شود ( همانند مثال فوق ) .
پس از ذخيره كد فوق در فايلی با نام CacheExample1.aspx
و اجراء آن ، نتايج جالب و قابل توجه ای را مشاهده خواهيم كرد . اولين مرتبه ای كه
صفحه درخواست می گردد ، تاريخ و زمان جاری در خروجی نمايش
داده می شود .در صورتی كه پس از گذشت مدت زمان بسيار كوتاهی صفحه را
refresh نمائيم ،
خروجی صفحه بهنگام نخواهد شد . در مقابل ،
ASP.NET بطور اتوماتيك خروجی نسخه
cache شده را ارسال خواهد كرد .
وضعيت فوق به مدت 20 ثانيه ادامه خواهد يافت و پس از اتمام تاريخ مصرف نسخه cache
شده ، ASP.NET مجددا" كد صفحه را اجراء و
يك نسخه جديد cache را ايجاد و از آن به مدت 20
ثانيه ديگر استفاده خواهد كرد .
شايد بنظر 20 ثانيه زمان زيادی نباشد ولی برای
سايتی كه حاوی اطلاعات گسترده ای جهت ارائه به كاربران متعدد است ، اين موضوع
می تواند كاملا" متفاوت
باشد. به عنوان نمونه ،
فرض كنيد می خواهيم ليستی از محصولات قابل عرضه به كاربران را در يك صفحه نمايش
دهيم . با
caching صفحه به مدت 20 ثانيه ، دستيابی به بانك
اطلاعاتی محدود به سه عمليات در يك دقيقه
می گردد . بدون
caching ، برای هر كاربری كه متقاضی مشاهده ليست
محصولات است ، می بايست فرآيند ارتباط با بانك اطلاعاتی و نمايش محصولات در يك
ساختار نمايشی مناسب ( نظير Gridview ) انجام شود .
بديهی است با caching صفحه به مدت 20 ثانيه امكان
پاسخگوئی به ده ها درخواست در مدت زمان فوق و بدون نياز به دنبال كردن فرآيند
ارتباط با بانك اطلاعاتی و نمايش داده انجام می شود .
توجه داشته باشيد كه اگر
مدت زمان حضور يك نسخه cache در حافظه 20 ثانيه
تعيين شده باشد ، اين بدان معنی نخواهد بود
كه واقعا" در طی مدت زمان فوق نسخه cache شده در حافظه
وجود خواهد داشت . صفحه مورد نظر ممكن است در اولين فرصتی كه سيستم
به منظور انجام كارهای اساسی تر خود با
كمبود حافظه مواجه
شود از آن خارج گردد . بدين ترتيب ، پياده كنندگان می
توانند با خيالی آسوده از cache استفاده نمايند بدون اين
كه نگران تاخير در اجرای برنامه به دليل استفاده از عنصر حياتی حافظه توسط
cache باشند.
زمانی كه يك صفحه cache شده مجددا" ترجمه می
گردد ، ASP.NET بطور اتوماتيك صفحه را از
cache خارج می نمايد . بدين ترتيب از بروز مسائلی نظير
عدم وجود نسخه بهنگام شده در cache ممانعت بعمل می آيد .
در زمان تست برنامه بهتر است كه caching غير فعال گردد
. در زمان استفاده از روش ها و تكنيك های اشكال زدائی نظير متغيرهای watch
و يا ايجاد نقاط breakpoint ممكن است با مشكلاتی مواجه شويم . در چنين
مواردی در صورتی كه يك نسخه cache شده از
صفحه در دسترس باشد
، كد مرتبط با آن در زمان اشكال زدائی اجراء نخواهد شد .
Caching سمت سرويس گيرنده
يكی ديگر از گزينه ها ، cache صفحه
در سمت سرويس گيرنده است . در
اين روش ، مرورگر نسخه
ای از صفحه را ذخيره و بطور اتوماتيك
از آن در مواردی كه دكمه back مرورگر كليك و يا آدرس
URL صفحه مجددا" تايپ شود، استفاده می نمايد . در صورتی
كه كاربر دكمه Refresh را فعال نمايد ، از نسخه
cache شده صرفنظر و صفحه
مجددا" از سرويس دهنده درخواست می گردد .
برای cache يك صفحه در سمت سرويس گيرنده از خصلت
Location در دايركتيو OutputCache استفاده می گردد . مقدار پيش فرض اين خصلت
server است و می تواند مقادير ديگر نظير
Client ، None و
Any را به آن نسبت داد .
|
<%@ OutputCache Duration="20" VaryByParam="None"
Location="Client" %> |
استفاده از
caching سمت سرويس گيرنده بمراتب كمتر از
caching سمت سرويس دهنده است چراكه صفحه همچنان برای هر
كاربر خاص مجددا" ايجاد خواهد شد . در روش فوق ، شاهد كاهش مدت زمان اجراء كد و يا
دستيابی به بانك اطلاعاتی در جهت بهبود كارآئی برنامه نخواهيم بود . از روش
caching سمت سرويس گيرنده در موارد خاصی
نظير زمانی كه صفحه
cache شده حاوی داده سفارشی و مختص به يك كاربر است ،
استفاده می گردد
.
در صورتی كه هر كاربر در يك session مجزاء فعاليت می
نمايد ، صفحه يك مرتبه ايجاد
و تمامی سرويس گيرندگان از آن استفاده
خواهند كرد . در چنين وضعيتی ممكن است عملكرد يك صفحه با مشكل مواجه گردد ( نظير نمايش يك
پيام خوش آمدگوئی به كاربر و بر اساس نام آن ) . در مقابل ، می توان از
fragment caching برای caching بخش
هائی خاص از صفحه و يا
caching سمت سرويس گيرنده به منظور ذخيره
نسخه مختص يك كاربر بر روی كامپيوتر هر يك از سرويس گيرندگان استفاده نمود.
دربخش پنجم به بررسی ساير
روش های موجود برای output caching خواهيم پرداخت .