سوالف اندرويد




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > ASP و ASP.NET
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الوسوم:

الرد على الموضوع
 
LinkBack أدوات الموضوع
مشرف قسم asp.net
#1  
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"
يقوم فقط بنقل مؤشر المتغير في الذاكرة إلى مؤشر جديد وبقاء القيمة القديمة الى أن تقرر ال GC قتله

وتصور أنك تقرا من قاعدة تقرأ وكل شوية تكتب +=
مئات المتغيرات ستقوم بإنشائها وهكذا تستهلك مصادر النظام

ما الحل ؟؟

هناك حلان

الحل الأول إذا كنت مبرمج سي شارب مجنون ... أقصد محترف أن تستخدم المؤشرات 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" />
10- استخدم ضغط ViewState عند الطلبات

كود:
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>
وثم استدعيه في ال pipeline
كود:
<httpModules>
<add name="CompressionModule"
type="blowery.Web.HttpCompress.HttpModule,
blowery.web.HttpCompress"/>
</httpModules>
12- استخدام الأجاكس
طبعا قمت بشرح مبسط لآلية الأجاكس في سوالف سابقا وفكرة التسريع بسيطة وهي أن الأجاكس تقوم بتحديث جزء من الصفحة بدلا من كل الصفحة مع اخذ الاعتبار زيادة حجم الصقحة إذا لم تكن تعلم الكثير عن الأجاكس

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) لانه رقم ثابت ولا تجري عليه أية عمليات حسابية .






__________________
مطور مواقع ASP.NET & تطبيقات Windows 8 & تطبيقات جوال WP7
بريدي :khalilme at hotmail.com

آخر تعديل بواسطة خليل سليم في 20-02-2008 الساعة 01:02 PM. السبب: العنوان خطأ
خليل سليم is offline   قديم 20-02-2008, 12:49 PM
الرد مع إقتباس
عضو نشيط
#2  

شكراااااااااااااااااا على مجهودك الرائع






seastar is offline   قديم 20-02-2008, 05:25 PM
الرد مع إقتباس
عضو نشيط جدا
#3  

يديك الف عافيه






ctrl is offline   قديم 21-02-2008, 06:45 PM
الرد مع إقتباس
عضو سوبر نشيط
#4  

معلومات جميلة ولي عودة فيما بعد للتعلليق






__________________
Eng.Fedail
Computer and Electronics Engineer
الثلج is offline   قديم 24-02-2008, 04:58 AM
الرد مع إقتباس
عضو نشيط
#5  

ممتاز اخي خليل موضوع قيم جدا وكلنا نعاني من مسالة السرعه في بعض الاحيان وخصوصا عندما تكون النتائج كثيره بالاستدعاء من قاعدة البيانات

ياليت كلنا نشارك بافضل الطرق الي وصلنا لها بخصوص التسريع وان شاء الله لي عودة للموضوع

اخي خليل لو توضح لنا بالشرح اكثر حول استخدام ال Cashing لان حسب مافهمت منك على الماسنجر انها مهمه جدا في تسريع عمليات الاستدعاء






__________________
@_@
nothing4u is offline   قديم 24-02-2008, 01:26 PM
الرد مع إقتباس
عضو نشيط
#6  

شكراً لك أخي علي الموضوع المميز






__________________
ahmed sliman .. Web Programmer
ahmeds _ link @ hotmail . com
ahmeds_link is offline   قديم 18-03-2008, 02:42 PM
الرد مع إقتباس
عضو نشيط
#7  

بارك الله فيك و جزاك الله خير


تحياتي
نوكيا الشرق الاوسط






menokia is offline   قديم 20-04-2008, 05:52 AM
الرد مع إقتباس
عضو نشيط
#8  

بارك الله فيك اخى خليل معلومات اكثر من رائعة






Wael Hindam is offline   قديم 25-02-2009, 10:00 AM
الرد مع إقتباس
عضو سوبر نشيط
#9  

أهلاً ..
موضوع جيد .. و لكن لي ملاحظات ..
1) *.ashx ليست ملفات Web Service بل هي ملفات Http Handlers .. ملفات الـweb Service تكون *.svc أو *.asmx ، فهل تقصد web service أم http handlers ؟ لأن كلاً من الحالتين له استخدامه
2)الـCachingو ليس الـCashing يفيد في معظم الحالات ..
3)بخصوص ملاحظة 18 .. الأفضل من وجهة نظري هو استخدام DB Provides تدعم مباشرة من الـ.NET مثل الـMS SQL Serverو الـOracle .. أما الـmySQL فهي ليست ضعيفة خاصة - حسب ما سمعت - إن شركة SUN اشترتها و لكن لها طرق أخرى في التشغيل ..
4) بخصوص ملاحظة 19 .. الـStored Procedures حل ممتاز للحماية من الاختراق و لها أيضاً فايدة فصل كود الـDB و لكن يمكن استخدام الـADO.NET classes مباشرة مع استخدام Command.Parameters .. ستقوم أيضاً باللازم
5) ملاحظة الـStringBuilder .. طبعاً كلامك سليم و لكن أعلق على نقطة "الحل الأول إذا كنت مبرمج سي شارب مجنون ... أقصد محترف أن تستخدم المؤشرات UnSafe Code وعندها أتمنى من الله أن يرعاك" ..
المقصود هنا استخدام الـPointers و هو حل ممتاز في مسائل الـPerformance المعقدة .. أما في الأحوال العادية يفضل استخدام الـStringBuilder مباشرة .. و خاصة في Document-Flow Applications
6) و بقية الملاحظات جيدة طبعاً و تأتي من الممارسة و البرمجة .. ( لم أقرأ كود ضغط الـView State ،،)

ملاحظة أخرى على تحسين الـPerformance و لكنه من الحالات المتقدمة هو قراءة كود الـCIL و الوصول إلى أعلى قدر من الـOptmization .. فاستخدام ?: مثلاً أفضل من الـif()else العادية ..

Dr.no






__________________
دكتور لا
Dr.no is offline   قديم 21-03-2009, 10:45 PM
الرد مع إقتباس
مشرف قسم asp.net
#10  

أخي أهلا بك

1- نعم ذكرت الاسم وأخطأت بالامتداد وقد أصبح لا يمكنني تعديلها .. وشكرا لك
2- هي الكاشنج وخطأ بالاملاء .. أشكرك على التنبيه
3- القصد هنا مثل ما وضحت بالشكل الأول صح ، وأيضا أعارضك في القسم الثاني حيث الجميع يقر بأن الأوراكل ومايكروسوفت أفضل من غيرها
4- نعم استخدام الباراميترز يغطي دور الأمان بشكل مقبول ولكن لا يغطي كافة المزايا الأخرى كالسرعة، وللعلم فقط الباراميترز أعتمدها ولكنها ليست أأمن من الستورد بروسيجرز
فقط

5- أخي لم أقرأ هذه النقطة في موقع ولم أقم بالتعبير الهاطئ عنها، أنا وضعتها حيث أريد ومنت أقصد منها المعنى الحرفي، لأوضح أن السترينج بيلدر ما هو الا فئة تتعامل بالبوينترز كنوع من فهمي لآلية عمله

وان شاء الله سأقوم بكتابة موضوع جديد به أضعاف هذه الملاحظات
وشكرا لك






__________________
مطور مواقع ASP.NET & تطبيقات Windows 8 & تطبيقات جوال WP7
بريدي :khalilme at hotmail.com
خليل سليم is offline   قديم 22-03-2009, 12:10 AM
الرد مع إقتباس
عضو نشيط
#11  

يعطيك الف عافية ياغالي وجاري التجربة الان






1bahrain is offline   قديم 18-07-2009, 02:58 AM
الرد مع إقتباس
عضو سوبر نشيط
#12  

الاخ خليل الف شكر على المجهود الرائع .
صراحه موضوع متعوب عليه..
ووفقك الله لما يحب ويرضى...
أخوك سعد,انا داخل بعضويه اخي مابعرف لماذا لم تفعّل عضويتي
انا العضو Desert Eagle






__________________
BNAAN
لحلول الويب المتقدمة
www.bnaan.com
ستايلو.نت is offline   قديم 26-07-2009, 03:04 AM
الرد مع إقتباس
عضو جديد
#13  

رائع جداً بارك الله بك ع الشرح المميز






__________________
لمسات عربية
احمدالزاوية is offline   قديم 15-06-2010, 11:47 PM
الرد مع إقتباس
الرد على الموضوع



أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
نداء لمن يعرف site4host.net هذا الشخص ليس للوقت لديه أهمية شبكة لغاتى عروض البيع وطلبات الشراء في البرمجة والتصميم وبناء المحتوى وتبادل الاعلانات 26 20-01-2008 11:41 PM
مبرمج asp.net محترف من الدرجة الأولى يبحث عن شركة جديدة خليل سليم عروض البيع وطلبات الشراء في البرمجة والتصميم وبناء المحتوى وتبادل الاعلانات 4 20-01-2008 06:02 AM
بصراحة : كل ما تريدة بضغطة واحدة !! eltawoos.com الويب والويب 2.0 والـ Semantic Web 8 06-03-2006 03:26 PM
حقيقة العلاقه بين موقع العرب و عرب هوست alwsem20 سوالف الاستضافة 26 12-04-2002 07:58 PM
فض الخلاف بين yahooooh و موقع العرب beshoo الويب والويب 2.0 والـ Semantic Web 4 27-07-2001 12:29 PM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 09:47 PM.