| |||||||
| المدوّنات | البحث | مشاركات اليوم | اجعل كافة المشاركات مقروءة |
|
| | LinkBack | أدوات الموضوع |
| |||||
| 22 طريقة لتحسين أداء وتسريع موقع مبرمج ب ASP.NET إخوتي الأعزاء في سوالف وجميع من يشاهد هذا المقال الصراحة بعد فترة طويلة من البرمجة وفترة أقل طولا من البرمجة تحت إطار عمل الدوت نت وخصوصا تطوير المواقع أصبحت لدي بعض الطرق لتحسين أداء الموقع والحمد لله .. وهي طرق فعالة وقلت أضعها هنا وأجمعها لكم لكي تستفيدوا منها لأنني أرى حاجة المطور العربي لنصائح مشابهة في حين تأخرنا في مواكبة أداء المواقع العالمية .ٍ وسأقوم بتقسيم الخطوات تحت بنود معينة وأيضا لكبر الموضوع ولضيق الوقت هنالك بعض المصطلحات سأذكرها بدون شرحها (المبتدئين عليهم بجوجل لحل طلاسمها ) ولن أتطرق بالتفصيل لها ----- تسريع الكود هذه الطريقة من أقلها تأثيرا في الأوقات المعتادة ولكنها فعالة عندما يزداد الضغط على السيرفر ( مثلا زيادة الزوار ) لأن تأثيرها ضئيل غالبا . .. إذا كنت ستبني موقع فوق المتوسط عليك التركيز هنا . 1- التحويل إلى أحدث إصدار من إطار عمل الدوت نت. هذه أول ميزة وأهمها لأن كل إصدار يكون فيه الكثير من التحسينات وأكثر أمانا وووو إلخ . فمثلا الإصدار الثاني من asp.net أسرع من الإصدار 1.1 أحيانا بنسبة 70% في الأداء . 2- استخدام البرمجة الكائنية في الأسلوب هذا بداية يسهل عليك قراءة الكود وتعديله وثم يسرع عملية المعالجة بسرعة كبيرة فمثلا . لا أقصد هنا فقط آلية كتابة الكود ولكن الكتابة الصحيحة باستخدام المبادئ الصحيحة فمثلا : ** الربط المتأخر بالفيجوال بيسك عملية بطيئة .ٍ. ** الصندقة واللاصندقة أيضا ينتج عنها بطء ، وهنا أيضا اسخدام مثلا ال Generics في مجموعة تأخذ نص بدلا مما تأخذ كائن كما بالإصدار السابق وهذا يحسن الأداء بسرعة كبيرة. ** المتغيرات الستاتيكة أبطأ من غيرها . ** تعريف متغير انتجر في حين أن العدد المسند له هو عمر إنسان ، وعمر الانسان لا يفوق ال 255 سنة في بلادنا هذه الا إذا كنت تبني موقع ليزوره سكان اليابان أو سكان المناطق النائية باقريقيا . ** استخدام كلمة Overloads عند إعادة القيادة. ** تعريف كائنات وعدم قتلها ويفضل استخدام Using End Using ( using () { } للسي شارب) . الأمثلة هنا تطول جدا جدا .. ولكن الأسلوب العلمي الصحيح مفيد جدا فلو جمعت كل هذه العثرات البسيطة ستحصل على شيء ملموس. 3- استخدام فئة StringBuilder بدلا من فئة String معتادة جميعكم يعلم بأن الكود التالي كود: Dim name As String = "Khalil"
name += " Saleesm" وتصور أنك تقرا من قاعدة تقرأ وكل شوية تكتب += مئات المتغيرات ستقوم بإنشائها وهكذا تستهلك مصادر النظام ما الحل ؟؟ هناك حلان الحل الأول إذا كنت مبرمج سي شارب مجنون ... أقصد محترف أن تستخدم المؤشرات UnSafe Code وعندها أتمنى من الله أن يرعاك أو الحل الثاني أن تستخدم فئة ال StringBuilder كود: Dim sb As New System.Text.StringBuilder("Khalil")
sb.Append(" Saleem") هكذا يتم التعديل ديناميكيا على نفس القيمة وترفير الكثير من المساحة في الذاكرة . 4- استخدم الويب سيرفس ( .ashx ) الويب سيرفس أسرع في الأداء في بعض الاستخدامات بكثير من الصفحات العادية وهذا خصوصا عند استخدامها مع الأجاكس حاليا . ** الاتصال بقاعدة البيانات ( لي وقفة مع قواعد البيانات ولكن هنا أتكلم عن الكود ) 5- فتح الاتصال عند الضرورة وإغلاقه فور الإنتهاء منه كمن يقوم بفتح الاتصال وثم يرسل بريد أو يعالج البيانات وثم يغلق الاتصال ..والصواب : افتح الاتصال وخزن بمتغير وثم اغلق الاتصال وبعدها عالج البيانات من المتغير براحتك حتى لا تنهي البولينج المتاحة للكونكشن 6- ال DataReader أسرع بثلاث مثلا من ال DataAdapter فعندما يمكن استخدام الطريقتين بنفس الآلية قدم الداتا ريدر. ----- إعدادات الموقع والصفحات 7- أهم ميزة بنظري هي ال ViewState وأرجو الانتباه لها بامكانك تعطيلها من الويب كونفج لكل الموقع كود: <pages enableViewState="false" /> كود: <%@ Page Language="VB" EnableViewState="true" كود: <asp:Label ID="Label1" runat="server" EnableViewState="false" ></asp:Label> ولو تم تعطيلها من صفحة فإن الوقت اللازم لتحميل الصفحة سيتناقض إلى النصف في بعض الاحيان ويزيد عن النصف في أحيان أخرى . 8- عندما تكون صفحة بطيئة نسبيا عن باقي الصفحات استخدم ال Trace لترى بالضبط أين يبطأ الكود مع العلم أنه توجد أدوات جاهزة تخبرك بهذا الأمر . 9- قم بالغاء الطلبات الغير مستخدمة و الغير لازمة في قسم الاعداد <httpModules> كالغاء مثلا المصادقة بالوندوز أو بالهوتميل إذا كنت تستخدم مصادقة ال فورمز أو الغي البروفايل إذا لم تستعمله ... إلخ كود: <httpModules>
<remove name="WindowsAuthentication" />
<remove name="PassportAuthentication" /> كود: using System;
using System.IO.Compression;
using System.IO;
using System.Web.UI;
public class CompressedViewStatePage : System.Web.UI.Page
{
static public byte[] Compress(byte[] b)
{
MemoryStream ms = new MemoryStream();
GZipStream zs = new GZipStream(ms, CompressionMode.Compress);
zs.Write(b, 0, b.Length);
return ms.ToArray();
}
static public byte[] Decompress(byte[] b)
{
MemoryStream ms = new MemoryStream(b.Length);
ms.Write(b, 0, b.Length);
// last 4 bytes of GZipStream = length of decompressed data
ms.Seek(-4, SeekOrigin.Current);
byte[] lb = new byte[4];
ms.Read(lb, 0, 4);
int len = BitConverter.ToInt32(lb, 0);
ms.Seek(0, SeekOrigin.Begin);
byte[] ob = new byte[len];
GZipStream zs = new GZipStream(ms, CompressionMode.Decompress);
zs.Read(ob, 0, len);
return ob;
}
protected override object LoadPageStateFromPersistenceMedium()
{
byte[] b = Convert.FromBase64String(Request.Form["__VSTATE"]);
LosFormatter lf = new LosFormatter();
return lf.Deserialize(Convert.ToBase64String(Decompress(b)));
}
protected override void SavePageStateToPersistenceMedium(
object state
)
{
LosFormatter lf = new LosFormatter();
StringWriter sw = new StringWriter();
lf.Serialize(sw, state);
byte[] b = Convert.FromBase64String(sw.ToString());
ClientScript.RegisterHiddenField("__VSTATE",
Convert.ToBase64String(Compress(b)));
}
} كود: public partial class MyPage : CompressedViewStatePage If 11- تمكين دعم ضغط ال HTTP مثلا كنت تستخدم IIS قديم ( الإصدار 5 ) وغير قادر على الولوج لاعداداته او تريد ان تضغط قسم معين كود: <configSections> <sectionGroup name="blowery.web"> <section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler, blowery.Web.HttpCompress"/> </sectionGroup> </configSections> <blowery.web> <httpCompress preferredAlgorithm="gzip" compressionLevel="high"> <excludedMimeTypes> <add type="image/png" /> <add type="image/jpeg" /> <add type="image/gif" /> </excludedMimeTypes> </httpCompress> </blowery.web> كود: <httpModules> <add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule, blowery.web.HttpCompress"/> </httpModules> طبعا قمت بشرح مبسط لآلية الأجاكس في سوالف سابقا وفكرة التسريع بسيطة وهي أن الأجاكس تقوم بتحديث جزء من الصفحة بدلا من كل الصفحة مع اخذ الاعتبار زيادة حجم الصقحة إذا لم تكن تعلم الكثير عن الأجاكس 13- استخدم الجافا سكريبت والسي اس اس والمعايير الصحيحة الجافا سكريبت توفر عليك الكثير من طلبات السيرفر الغير لازمة كاستخدام أدوات التحقق Validation Controls او كتابة كودك الخاص عند الحالات الخاصة وعند ذكر الجافا سكريبت حبيت أن أذكر السي اس اس CSS فهي تخزن على جهاز المستخدم وتوفر ولو قليلا ولكنها مع المعايير تجعل موقعك يفتح بنفس الشكل على كل المتصفحات 14- استخدام ال Cashingفعلا من أعظم ما قد يساعد في توفير الحمل على السيرفر أو قاعدة البيانات ( مع زيادة الحمل على الذاكرة ) إذا تم استخدامها بالشكل الصحيح هي الكاشنج فمثلا بدلا من أن تتصل بقاعدة البيانات 5000 مرة في الدقيقة ( بفرض وجود ألف زائر وكل صفحة بها خمس طلبات من القاعدة ) ستقوم بالاتصال مرة واحدة تصور من 5000 آلاف إلى واحد ابحث بجوجل عن الكاشنج وستجد مئات المواضيع المفيدة 15 - استخدم أدوات HTML بدلا من أدوات <asp:xxxxx runat="server" ( ادوات ال asp.net التي تعمل على السيرفر ) فهذا يوفر على الخادم من معالجة كل أداة ... القصد هنا في الحالات البديلة فمثلا أن تضع صورة مباشرة أو نص مباشر. 16- استخدام آخر نسخة من خادم IIS لوجود الكثير من التعديلات عليه والخوارزميات الجديدة .. فمثلا الإصدار 5 يجب تفعيل ضغط الصفحات ، الإصدار 6 وثم 7 تجد أن هذا الخيار مفعل تلقائيا . وهذا يعني أيضا اختيار سيرفر محترم وسريع وليس سيرفر به ألف موقع على رام 2 جيجا فالشركات التي تهتم بالتحديثات تهتم بالأداء غالبا . 17- استخدم آخر التقنيات والأدوات. مثلا عند اتسخدام ال Membership الخاصة بمايكروسوفت تكوت قد كسبت السرعة والأمن والراحة ووو الكثير من الأمور التي تتطلب منك وقت كثير وكذلك استخدام ال Profile أو استخدام برمجة تطبيقات قواعد البيانات بنظام الطبقات N Tier فالتقنيات والأدوات أتت من أناس خبراء أمضو سنون العمر في التحليل والبرمجة ( لا أقول للمتخصصين أنها أفضل فهم يعلمون أن أكوادهم في بعض المناطق تعطي أداء أفضل ). ------ قاعدة البيانات 18- استخدم قواعد بيانات قوية مميزة مثل مايكروسوفت سكول وأوراكل وابتعد عن الاكسيس والماي سكول ( تاعون البي اتش بي بيزعلوا ) فهي من شركات يكفي اسمها ودعمها . 19- استخدم دائما ال Stored Procedures فهي أسرع وأكثر أمانا من غيرها ... ولا تستخدم على الإطلاق commandtext="select ..... where name ='" + Textbox1.Text + "'' فعندما تقوم بعملية الإضافة بالشكل + تكون قد سلمت موقعك ضحية للمخترقين 20-استخدام الIndex أهم شي في القاعدة عند وجود أعمدة تجلب البيانات حسبها ( كالبحث ) أن تستخدم Index صحيح وعلى الأعمدة التي سنقوم باجراء البحث عليها مثل الرقم الفريد للموظف او اسم الطالب في المدرسة أو حسب تحليلك ففي موقع السيارات العربية تقريبا يوجد اندكس على معظم حقول جدول السيارات لان البحث يتم بالشركة والموديل والسنة واللون والمحرك وووو.. وصدقوني فالاندكس الخفيف الصحيح يسرع البحث ويوفر على السيرفر عشرات عشرات الأضعاف إن لم يكن في بعض الأحيان عشرات المئات في الجدوال الكبيرة والعمليات الكثيرة. 21- عند كتابة جملة Select لا تجلب كل الحقول ب * ... اجلب فقط الحقول التي تلزمك وفقط ... الا اذا كانت تلزمك كل الحقول . 22- استخدم أنواع الحقول الصحيحة فالنوع tinyint للعمر وليس النوع int مباشرة والنوع بت لذكر او انثى ... ورقم الهوية لا تستخدم رقم بل استخدم Char(9) لانه رقم ثابت ولا تجري عليه أية عمليات حسابية .
__________________ Response.Write ( م. خليل سليم مطور مواقع ASP.NET للتواصل : khalilme@hotmail.com ) التعديل الأخير تم بواسطة : برمودا بتاريخ 20-02-2008 الساعة 01:02 PM. سبب آخر: العنوان خطأ | |||||
|
| |||||
|
ممتاز اخي خليل موضوع قيم جدا وكلنا نعاني من مسالة السرعه في بعض الاحيان وخصوصا عندما تكون النتائج كثيره بالاستدعاء من قاعدة البيانات ياليت كلنا نشارك بافضل الطرق الي وصلنا لها بخصوص التسريع وان شاء الله لي عودة للموضوع اخي خليل لو توضح لنا بالشرح اكثر حول استخدام ال Cashing لان حسب مافهمت منك على الماسنجر انها مهمه جدا في تسريع عمليات الاستدعاء
__________________ احنا بكل فخر واخلاص باغة باروده ورصاص وصقور تحب المقناص بجو الأردن عاليه وفوق الأردن عاليه ........ | |||||
|
![]() |
| أدوات الموضوع | |
| |
المواضيع المتشابهه | ||||
| الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
| نداء لمن يعرف site4host.net هذا الشخص ليس للوقت لديه أهمية | شبكة لغاتى | خدمات البيع والشراء والإعلانات التجارية | 26 | 20-01-2008 11:41 PM |
| مبرمج asp.net محترف من الدرجة الأولى يبحث عن شركة جديدة | برمودا | خدمات البيع والشراء والإعلانات التجارية | 4 | 20-01-2008 06:02 AM |
| بصراحة : كل ما تريدة بضغطة واحدة !! | eltawoos.com | تطوير الويب | 8 | 06-03-2006 03:26 PM |
| حقيقة العلاقه بين موقع العرب و عرب هوست | alwsem20 | قسم تبادل خبرات الاستضافة | 26 | 12-04-2002 07:58 PM |
| فض الخلاف بين yahooooh و موقع العرب | beshoo | تطوير الويب | 4 | 27-07-2001 12:29 PM |