یکی از ملزومات کلیدی در هر نوع برنامه کامپیوتری میزان کارائی و قابلیت پاسخگوئی سریع آن به کاربران است . طراحان و پیاده کنندگان برنامه های کامپیوتری می بایست در زمان طراحی ، پیاده سازی و نوشتن کد به این موضوع توجه جدی داشته باشند.
برنامه های وب با توجه به ماهیت و رسالت خود می بایست قادر به ارائه خدمات مورد نیاز به صدها و یا هزاران متقاضی همزمان به سادگی و با سرعت مطلوب باشند. به عبارت دیگر ، همزمان با افزایش کاربران نمی بایست شاهد افت سرعت و کارآئی یک برنامه وب باشیم .
با ارائه فریمورک دات نت و به دنبال آن ASP.NET ، پیاده سازی یک برنامه وب بطرز ناباورانه ای ساده شده است . همین موضوع باعث شده است که طراحان و پیاده کنندگان بیشتر در اندیشه طراحی و پیاده سازی سریع برنامه های وب باشند و به مسائل مربوط به کارآئی برنامه کمتر توجه نمایند .
پیاده کنندگان برنامه های وب با استفاده از فناوری ASP.NET می بایست با بکارگیری مجموعه ای از ترفندها ، فناوری ها و رعایت برخی نکات کلیدی اقدام به پیاده سازی برنامه های وب با کارآئی بالا نمایند .
در این مقاله و سایر مقالاتی که در آینده منتشر خواهد شد قصد داریم به برخی از روش های موجود به منظور طراحی و پیاده سازی یک برنامه وب کارآ اشاره نمائیم . بدین منظور بر روی سه محور اساسی زیر متمرکز خواهیم شد :
• طراحی برای کارآئی : در این رابطه به مجموعه ای از نکات کلیدی اشاره خواهیم کرد که رعایت آنها در زمان طراحی می تواند زمینه پیاده سازی یک برنامه وب کارآ را فراهم نماید .
• تست برنامه قبل از عملیاتی شدن آن : یکی از مسائل مهم در ارتباط با برنامه های وب ، عدم تست آنها با شرایط مشابه و یا نزدیک به محیط واقعی است . در این راستا می توان از نرم افزارها و یا ابزارهای مختلفی استفاده کرد تا بتوان عملکرد و سرویس دهی یک برنامه وب را قبل از زیر بار رفتن واقعی مشاهده و بررسی نمود . شرکت مایکروسافت در این رابطه ابزارها و برنامه های متعددی را ارائه نموده است که به بررسی آنها خواهیم پرداخت .
• پیاده سازی سیستم caching : با پیاده سازی سیستم caching در سطوح متفاوت و caching داده می توان کارآئی برنامه های وب را بطرز کاملا محسوسی افزایش داد. در این بخش به نحوه پیاده سازی سیستم caching در برنامه های وب اشاره خواهیم کرد .
در ادامه بر روی اولین محور متمرکز و به بررسی مسائل مرتبط با آن خواهیم پرداخت .
طراحی برای کارآئی
توجه و رعایت موارد زیر پیاده کنندگان را در جهت پیاده سازی برنامه های وب با کارآئی بالا کمک خواهد کرد :
مکانیزم ترجمه کد در ASP.NET
برنامه های نوشته شده با استفاده از ASP.NET دارای کارآئی بمراتب بیشتری نسبت به برنامه های نوشته شده با استفاده از ASP کلاسیک می باشند . این دستاورد ناشی از ترجمه اتوماتیک کد در ASP.NET است . در صفحات قدیمی نوشته شده با استفاده از ASP کلاسیک ، کدها و یا اسکریپت های موجود در یک صفحه برای هر یک از درخواست های کاربران پردازش می گردید . در ASP.NET ، هر کلاس صفحه در اولین مرتبه دستیابی کمپایل و برای درخواست های آتی cache می گردد .
زمانی که اولین مرتبه یک کاربر صفحه ای را درخواست می نماید ( و یا اولین مرتبه دستیابی پس از ایجاد تغییرات در صفحه ) ، یک تاخیر قابل ملاحظه در زمان پاسخ به درخواست خود را مشاهده می نماید ( تاخیر ناشی از ترجمه صفحه ) . برای برخورد با این موضوع می توان از روش precompilation استفاده نمود . با استفاده از روش فوق پس از استقرار صفحات بر روی سرویس دهنده وب ، بلافاصله امکان درخواست و بازیابی سریع آنها برای متقاضیان فراهم می گردد .
کنترل های سرویس دهنده
کنترل های سرویس دهنده عناصر اصلی در یک صفحه ASP.NET می باشند و load زیادی را به برنامه تحمیل نخواهند کرد . این نوع کنترل ها معمولا دارای کارآئی بمراتب بهتری نسبت به زمانی می باشند که یک صفحه به صورت پویا و با استفاده از ترفندهائی نظیر متد Response. Write خروجی خود را تولید می نماید.
در برخی موارد ضرورتی به استفاده از کنترل های سرویس دهنده ASP.NET در یک صفحه وب نخواهیم داشت . به عنوان نمونه ، در صورتی که دارای یک متن ایستا می باشیم که هرگز ضرورتی به دستیابی و تغییر آن در زمان اجراء و از طریق کد نداریم ، لزومی به استفاده از کنترلی نظیر label نخواهیم داشت . در چنین مواردی می توان به سادگی متن مورد نظر را با استفاده از امکانات HTML در فایل aspx. قرار داد . در ویژوال استودیو می توان از کنترل DIV ( موجود در بخش HTML ، منوی Toolbox) استفاده کرد. در واقع ما تکلیف متن مورد نظر جهت نمایش در یک صفحه aspx . را نه در زمان اجراء بلکه در زمان طراحی مشخص کرده ایم .
یکی دیگر از نکات مهم در زمان استفاده از کنترل های سرویس دهنده در صفحات وب ، توجه به رفتار آنها در ارتباط با نگهداری داده پس از ارسال مجدد به سرویس دهنده می باشد . به صورت پیش فرض ، مقادیر مرتبط با کنترل های سرویس دهنده نظیر مقدار درج شده در یک TextBox ، پس از postback بطور اتوماتیک در view state ذخیره می گردد . در واقع ، view state مکانیزمی برای نگهداری داده کنترل های سرویس دهنده است که هدف آن غلبه بر محدودیت پروتکل HTTP است ( ماهیت stateless ) .
view state ، یک نام مناسب برای ذخیره داده در یک فیلد ورودی مخفی درون صفحه است . پس از post back ( ارسال مجدد برای سرویس گیرنده ) یک صفحه ، سرویس دهنده قادر به بررسی مقادیر نگهداری شده در view state و استفاده از آنها با توجه به شرایط حاکم بر برنامه می باشد . view state یک قابلیت عالی است چراکه اجازه نگهداری وضعیت را با استفاده از امکانات سرویس گیرنده فراهم می نماید و در این رابطه از کوکی و حافظه سرویس دهنده برای ذخیره وضعیت استفاده نمی گردد .
تعداد زیادی از کنترل های سرویس دهنده ASP.NET از view state برای نگهداری تنظمیات خود در زمان تعامل با عناصر موجود بر روی صفحه استفاده می نمایند ( مثلا ذخیره صفحه جاری در زمان استفاده از ویژگی paging در کنترل سرویس دهنده gridview ) .
در زمان استفاده از view state توجه به موارد زیر ضروری است :
• playload صفحه را در زمان درخواست و ارائه افزایش می دهد .
• افزایش overhead در زمان serializing و deserializing داده ذخیره شده در view state که برای سرویس دهنده post-back شده است .
• افزایش تخصیص حافظه بر روی سرویس دهنده
کنترل های سرویس دهنده علاقه زیادی به استفاده از view state دارند حتی در مواردی که به وجود آن نیاز نمی باشد . به صورت پیش فرض viewstate فعال است و در صورت عدم نیاز می بایست آن را در سطح صفحه و یا کنترل غیرفعال نمود . در رابطه با یک کنترل کافی است که خصلت EnableViewState را false و یا می توان آن را به صورت سراسری و در سطح page غیر فعال نمود . دستور زیر نحوه انجام این کار را نشان می دهد :
<%@ Page EnableViewState=false %>
برای غیر فعال کردن view state در سطح صفحه و یا کنترل از قوانین زیر می توان استفاده نمود :
• در صورتی که در صفحه ای post back انجام نمی گیرد و یا صفحه می بایست همواره برای هر یک از کنترل های موجود بر روی صفحه و به ازاء هر درخواست مجددا تولید گردد ، می بایست view state را در سطح page غیر فعال نمود .
• در صورتی که ضرورتی به نگهداری داده مرتبط با یک کنترل سرویس دهنده در view state نمی باشد می بایست آن را برای کنترل مورد نظر غیر فعال نمود . بدین منظور لازم است که مقدار EnableViewState مربوط به کنترل معادل False در نظر گرفته شود .
• در صورتی که کنترل در زمان طراحی مقداردهی شده است و در زمان اجراء مقدار آن تغییر نمی یابد ، خصلت EnableViewState آن می بایست false در نظر گرفته شود .
• در صورتی که کنترل با هر post back ، مجددا خوانده شده و refresh می گردد و ضرورتی به نگهداری مقدار داده قبلی وجود نداشته باشد ، خصلت EnableViewState آن می بایست false در نظر گرفته شود .
• در صورتی که لازم است انتخاب کاربر پس از postback صفحه بازیابی گردد ، می بایست view state را برای کنترل مورد نظر فعال کرد.
view state ، عموما کند شدن سرویس دهنده را به دنبال نخواهد داشت بلکه حجم صفحه را افزایش داده و مدت زمان ارسال صفحه برای سرویس گیرنده را زیاد خواهد کرد . در چنین مواردی کاربران این برداشت را خواهند داشت که برنامه کند و قادر به ارائه پاسخ سریع به آنان نمی باشد ، خصوصا در مواردی که ارتباط بین سرویس گیرنده و سرویس دهنده از طریق یک خط با سرعت پائین برقرار شده باشد .
عدم استفاده صحیح از view state در برخی موارد می تواند ادامه حیات موثر یک برنامه وب را با چالش جدی مواجه نماید . این موضوع در برنامه هائی که از کنترل های زیادی در یک صفحه استفاده و حجم بالائی از داده را در خود نگهداری می نمایند، مضاعف می گردد. در چنین مواردی داده دو مرتبه به صفحه وب اضافه می گرد : مستقیما در کد HTML مرتبط با کنترل و مجددا در یک فیلد مخفی برای view state . داده فوق با هر post back بین سرویس گیرنده و سرویس دهنده مبادله می گردد .
با استفاده از page tracing می توان از تعداد بایتی که view state مصرف می کند آگاهی یافت .
در بخش دوم به بررسی سایر نکات به منظور افزایش کارآئی برنامه های وب با تمرکز بر روی بانک های اطلاعاتی در زمان طراحی خواهیم پرداخت .