استفاده از کنترل های سرویس دهنده (Server controls) این امکان را فراهم می نماید تا داده های را Encapsulate (نهان سازی) و قابلیت های مشترک را مورد استفاده مجدد قرار دهید که این امر بهینه سازی عملکرد برنامه نوشته شده تحت پلتفرم asp.net را بهمراه خواهد داشت.به شما پیشنهاد می شود برای درک و کسب اطلاعات بیشتر در حوزه زبان asp.net چیست مقاله تخصصی ما را مطالعه نمایید.
کنترل های سرویس دهنده ، برنامه نویسی انتزاعی ساختار یافته ای را جهت ساخت برنامه های ASP.Net فراهم می سازند و هنگامی که به درستی مورد استفاده قرار گیرند میتوانند در بهینه سازی output caching و کارایی کد های برنامه تاثیر بسزایی داشته باشند. هنگام استفاده و توسعه کنترل های سرویس دهنده (server controls) باید موارد زیر را جهت بهینه سازی عملکرد برنامه مد نظر داشته باشید:
- کاربرد viewstate را در کنترل سرویس دهنده خود مشخص نمایید.
- در جاهایی که نیاز به استفاده از کنترل های سرویس دهنده است از آنها استفاده نمایید.
- از استفاده از کنترل های سلسله مراتبی و پیچیده پرهیز نمایید.
کاربرد viewstate در کنترل سرویس دهنده چیست؟
برای حفظ چرخه های پردازشگر مرکزی (CPU Cycles) باید حدالامکان استفاده از ViewState را کاهش دهید و هنگامی که نیازی به آن ندارید آن را غیر فعال نمایید. در موارد زیر توصیه میگردد که ViewState را غیر فعال نمایید:
- نمایش یک صفحه با مطالب کاملا ایستا که هیچ ورودی از سمت کاربر نمی پذیرد.
- نمایش صفحه ای که دربردانده هیچ post back برای ارسال به سرور نمی باشد.
- بازسازی مجدد کنترل های سرویس دهنده با ارسال post back به سرور بدون در نظر گرفتن داده های postback
استفاده از کنترل های سرویس دهنده در جای مناسب
پروتکل http پروتکلی Stateless میباشد و کنترل های سرویس دهنده مدل برنامه نویسی مناسبی را که قادر است با استفاده از ViewState ،state ها را بین صفحات مدیریت و کنترل نماید ، فراهم میسازند.
کنترل های سرویس دهنده تعدادی ثابت از پروسه های را نیاز دارند تا کنترل ها و کنترل های فرزند را ایجاد نمایند که این امر کنترل های سرویس دهنده را در مقایسه با کنترل های HTML و یا متون ایستا پر هزینه تر می سازد.
سناریو هایی که کنترل سرویس دهنده دارای هزینه بالا می باشند
هزینه بارگزاری یا Payload بالا در مقابل پهنای باند کم به چه صورت است؟
هر چقدر از کنترل های بیشتری بر روی صفحات پویای خود بهره ببرید به همان اندازه payload شما بالاتر خواهد بود بنابر این استفاده از کنترل های چندگانه Multiple Controls)) زمان های TTLB(time to last byte) و TTFB(time to first byte) را برای پاسخ به سرویس گیرنده کاهش میدهد و هنگامی که پهنا باند بین سرویس دهنده و سرویس گیرنده محدود باشد ( هنگامی که سرویس گیرنده از یک اتصال Dial-up استفاده کند ) استفاده از ViweState های زیاد می تواند نتایج قابل توجهی بر روی عملکرد داشته باشد.
منظور از سربار ViewStateها چیست؟
کارایی واحد پردازش مرکزی کاملا متناسب با سایز ViewState ها است بعلاوه برای کنترل های سرویس دهنده که از ViewState استفاده می شود، توسط برنامه نویسی می توان به راحتی یک شی را به صفات ViewState اضافه نمود و نباید فراموش کرد که افزودن شی به ViewState ها به سربار خواهد افزود.
استفاده از کنترل های بیشمار
در صفحاتی که از کنترل هایی مانند DataGrid استفاده می نمایند مستقیما تاثیر ViewState ها و نرخ بالای ایجاد را بدنبال خواهد داشت.
در نظر داشته باشید هنگامی که نیازی به تعامل داده های زیادی با سرور ندارید ، میتوانید بجای استفاده از کنترل های سرویس دهنده از یک واسط درون خطی Inline user interface)) از رابط کاربری استفاده نمایید .
در شرایط زیر میتوانید کنترل های سرویس دهنده را جایگزین نمایید:
- نیازی به حفظ وضعیت در خلال PostBack ها ندارید.
- داده های که در کنترل شما مورد استفاده قرار گرفته اند از نوع ایستا می باشند مانند یک برچسب
- نیازی به برنامه نویسی جهت دسترسی به کنترل های سمت سرور ندارید.
- کنترل های داده های Read-only را نمایش میدهند.
- در خلال پردازش postback ها نیازی به کنترل ها نیست.
پرهیز از کنترل های سلسله مراتبی و پیچیده
استفاده از کنترل های سلسله مراتبی و تو در تو و پیچیده میتواند هزینه تولید یک کنترل سرویس دهنده و فرزندان آن کنترل را افزایش دهند و تاثیر مستقیم بر روی بهینه سازی و عملکرد برنامه های ASP.Net داشته باشد.
استفاده از این نوع کنترل ها نیازمند پردازش های بیشتری است که میتوان آنها را با استفاده از کنترل های درون خطی و یا با استفاده از کنترل های ساده تر جایگزین کرد . ( این جایگزینی در استفاده از کنترل هایی مانند Repeater,DataList,DataGrid بخاطر استفاده و ایجاد این کنترل ها از کنترل های فرزند اهمیت بسزایی دارد)
به عنوان مثال کنترل Repeater زیر را در نظر بگیرید:
<asp:repeater id=r runat=server>
<itemtemplate>
<asp:label runat=server><%# Container.DataItem %><br></asp:label>
</itemtemplate>
</asp:repeater>
در نظر بگیرید که در data source ما ۵۰ داده ذخیره شده باشد ، اگر شما صفحه ای را که کنترل شامل کنترل Repeater میباشد را ردیابی نمایید متوجه خواهید شد که در حقیقت بیش از ۲۰۰ کنترل در این صفحه مورد استفاده قرار گرفته است. در زیر میتوانید کنترل مربوطه را به همراه مشتقات جزیی و سلسله مراتبی به همراه Control ID لیست شده هر یک مشاهده نمایید.
Repeater System.Web.UI.WebControls.Repeater
repeater:_ctl0 System.Web.UI.WebControls.RepeaterItem
repeater_ctl0:_ctl1 System.Web.UI.LiteralControl
repeater_ctl0:_ctl0 System.Web.UI.WebControls.Label
repeater_ctl0:_ctl2 System.Web.UI.LiteralControl
repeater:_ctl49 System.Web.UI.WebControls.RepeaterItem
repeater_ctl49:_ctl1 System.Web.UI.LiteralControl
repeater_ctl49:_ctl0 System.Web.UI.WebControls.Label
repeater_ctl49:_ctl2 System.Web.UI.LiteralControl
کنترل لیست در ASP.net برای سناریو های مختلف طراحی شده است و ممکن است در سناریوی مورد نظر شما از عملکرد مناسب برخوردار نباشد فلذا در جاهایی که عملکرد بسیار حیاتی است میتوان یکی از موارد زیر را پیاده سازی و اجرا کرد:
- اگر میخواهید داده هایی غیر پیچیده را نمایش دهید ، بهتر است آنها را توسط صدا زدن متود Response.write بارگزاری نمایید. به عنوان مثال قطعه کد زیر نحوه استفاده از متود مذکور را در بارگزاری داده های ساده از DataSource را برای ما فراهم می سازد.
for(int i=0;i<datasource.Count;i++)
{
Response.Write(datasource[i] + “<br>”);
}
- اگر میخواهید داده هایی پیچیده را نمایش دهید ، میتوانید یک کنترل سفارشی همانند کنترل نوشته شده زیر ، جهت بارگزاری ایجاد نمایید.
public class MyControl : Control
{
private IList _dataSource;
public IList DataSource
{
get {return _dataSource;}
set {_dataSource=value;}
}
protected override void Render(HtmlTextWriter writer)
{
for(int i=0;i<_dataSource.Count;i++)
{
writer.WriteLine(_dataSource[i] + “<br>”);
}
}
}