نماد سایتنماد سایت بلاگ ایران هاست

مروری بر شیوه های بهینه سازی کد asp.net و کاهش مصرف منابع

تکنیک های زیر جهت بهینه سازی کد asp.net فراهم آوردن کارایی بسیار بالا برای سایت های طراحی شده با asp.net استفاده می شوند. با انجام این کارها کارایی سایت  از ۱۰ تا ۱۰۰ برابر افزایش می یابد . چندین httpmodule در asp.net وجود دارد که در pipeline مربوط به درخواست ها منتظر اند تا  درخواستها  را دریافت نمایند.

چک لیست بهینه سازی کد asp.net

SessionStateModule هر درخواست را بررسی کرده ، سپس به session cookie مراجعه و session صحیح را در Httpcontext لود میکند.البته همه ی این ماژولها ضروری نمی باشند. مثلا اگر از windows authentication برای اعتبار سنجی کاربران استفاده می کنید. به ماژول windows authentication نیازی ندارید.

چرا که این نوع ماژولها در pipeline قرار می گیرند و یک سری کدهای ضروری برای هر درخواست را اجرا می کنند.

ماژولهای پیش فرض در فایل machine.config تعریف می شوند.حال با افزودن تگ remove در فایل web.config می توانید آنها را حذف نمایید.

<httpModules>

         <!– Remove unnecessary Http Modules for faster pipeline –>

         <remove name=”Session” />

         <remove name=”WindowsAuthentication” />

         <remove name=”PassportAuthentication” />

</httpModules>

برای آشنایی با ajax می توانید مقاله ایجکس چیست را بخوانید.

پیکربندی فرآیندهای asp.net و بهینه سازی کد asp.net

برخی از سطوح فرآیندها مانند اینکه چه تعداد threat در asp.net مورد استفاده قرار می گیرد ، یک thread برای چه مدت بلاک شود ، چندین درخواست برای کارهای IO بایستی نگهداری شده  تاکامل گردد و . . . در آن تعریف می شوند. فرآیندها منابع سیستمی بیشتری مصرف کرده و مقیاس پذیری بهتری را در هر سرور ارائه می دهند.

[irp posts=”۱۱۴۲۶″ name=”بهینه سازی عملکرد asp.net با استفاده صحیح از Application State و Session State”]

 بهترین استفاده از Browser cache

زمانیکه Url تغییر پیدا می کند مرورگر نسخه ی جدید داده ها را  از سرور دریافت می کند. با تغییر پارامترهای query string ، URL نیز تغییر پیدا می کند. فرض کنید default.aspx در مرورگر cache شده ، حال زمانی که درخواست default.aspx?123 را ارسال می کنید ، محتوای جدید از سرور خوانده می شود  پس اگر می خواهید پاسخ تان از cache باشد ، بایستی به طور مداوم از Url اولیه استفاده کنید.

کش کردن محتوای ایستا (Static) برای مدت زمان طولانی دیگری تکنیکی است که برای فایلهای که قصد دارید حتی با به روز آوری آن باز هم کاربران فایل قبلی را مشاهده کنند مورداستفاده قرار می گیرد.

اگر فایلی را که توسط expire header کش شده باشد را به روز آوری کنید، کاربران جدید فایل را با تغییرات آن مشاهده می کنند .

جلوگیری از حملات denial of service با بهینه سازی کد asp.net

سرویس های وب هدفی جذاب برای هکرها می باشد، صفحاتی مانند pageflakes هدف مناسبی برای حملات DOS هستند،  چرا که اگر صفحه اصلی را به دفعات ویریت کنید هر hit یک کاربر جدید ، یک صفحه جدید و . . .را  تولید می کند.اولین تجریه ی ویزیت گرانترین آن خواهد بود.مثلا برای از کار انداختن یک برنامه دستور ساده زیر مناسب می باشد :

for( int i = 0; i < 100000; i ++ )

{

                                                                                                        WebClient client = new WebClient();

   client.DownloadString(“http://www.pageflakes.com/default.aspx”);

}

 حال با چندین فراخوانی پاسخ مناسبی را دریافت نمی کنید . این یعنی درخواست شما reject می شود.در این حالت زمانیکه تعداددرخواست ها از حد تعریف شده بیشتر می شود  درخواست ها برای مدتی deny می شوند.

تعداد درخواست ها برای هر IP نگهداری شده و IP فراخواننده نیز در cache مربوط به asp.net قرار می گیرد.

کش کردن فراخوانی های AJAX در مرورگر

مرورگر می تواند تصاویر ، JavaScript و فایل های CSS را در هارد ذخیره  و یا فراخوانی های Http را کش کندعملیات کش بر اساس url انجام می شود درصورتیکه درخواست Url یکسانی ارسال شود اطلاعات از کش خوانده می شود و با ارسال url جدید اطلاعات از سرور خوانده خواهد شد.

این کار باعث لود شدن سریع تر داده ها شده و زمان roundtrip شبکه افزایش می یابد.

برای مثال header زیر مرورگر را تنظیم می کند تا برای ۶۰ ثانیه اطلاعات را از کش بخواند و بعد از اتمام این زمان به سرور مراجعه کرده و اطلاعات جدید را لود کند.

HTTP/1.1 200 OK

Cache-Control: private, must-revalidate, proxy-revalidate, max-age=60

 در نهایت اقدامات زیر بر روی کدهای asp.net می تواند باعث بهینه سازی کد asp.net شود

Session state را غیر فعال کنید.

از صفت read-only در هر جا که نیاز است استفاده کنید.

مقادیر ذخیره شده در session را حذف کنید.

یک شی را برای چندین بار ذخیره نکنید.

Page size را کاهش دهید.

اندازه view state را کاهش دهید.

از فراخوانی های بی مورد AJAX خودداری کنید. به شما پیشنهاد می شود برای کسب اطلاعات بیشتر مقاله ما با موضوع کاربرد ajax چیست را مطالعه نمایید.

از متدهای خواندن داده  مانند GetString, GetInt64,  برای خوادندن مقادیر از datareader استفاده کنید .

تا حد ممکن از XMLDocument استفاده نکرده و به جای آن XPathDocument را به کار ببرید.

سوالات متداول

بهینه سازی کد asp.net با بهینه سازی pipeline در asp.net بهینه سازی کد asp.net با بهینه سازی پیکربندی فرآیندها در asp.net بهینه سازی کد asp.net با استفاده بهینه از Browser caching بهینه سازی کد asp.net و جلوگیری از حملات denial of service
زمانیکه Url تغییر پیدا می کند مرورگر نسخه ی جدید داده ها را از سرور دریافت می کند. با تغییر پارامترهای query string ، URL نیز تغییر پیدا می کند. فرض کنید default.aspx در مرورگر cache شده ، حال زمانی که درخواست default.aspx?123 را ارسال می کنید ، محتوای جدید از سرور خوانده می شود پس اگر می خواهید پاسخ تان از cache باشد ، بایستی به طور مداوم از Url اولیه استفاده کنید.
خروج از نسخه موبایل