يمكن لـ ASP تنفيذ صفحات الويب الديناميكية الخاصة بك بسرعة، ولكن يمكنك أيضًا تنفيذها بشكل أسرع عن طريق ضغط التعليمات البرمجية واتصالات قاعدة البيانات. هذه مقالة مفصلة حول كيفية تبسيط التعليمات البرمجية وميزات ASP للحصول على أسرع سرعة تنفيذ. بالنسبة لمستخدم غير صبور، هل أي تأخير بين الضغط على زر المستخدم وظهور النتيجة على شاشته قد يعني أنه يتصفح موقعًا آخر؟ إذا كان لديك موقع تجاري، فقد يعني ذلك خسارة المبيعات المحتملة.
ليس لدينا أي طريقة للتحكم في النطاق الترددي للمستخدم، ولكننا نحصل على أفضل أداء من خلال تحسين موقع ASP. تتم معظم تحسينات الأداء المحتملة من خلال تغييرات النظام بدلاً من تشديد التعليمات البرمجية. والفكرة غير المناسبة هي مطالبة مسؤول النظام بترقية النظام بمجرد مواجهة مشاكل في كفاءة النظام.
أولاً، ما هي العوامل التي قد تؤثر على أداء Asp؟ لسوء الحظ، هناك العديد من العوامل؟ هذه ليست سوى بعض منهم:
عرض النطاق الترددي المتاح
سرعة المعالج والأجهزة الأخرى الموجودة على الخادم
البرامج الأخرى التي تعمل على الخادم (مثل شاشات توقف OpenGL!)
وضع اتصال قاعدة البيانات، وتجمع الاتصال، ونظام قاعدة البيانات نفسه (على سبيل المثال، Oracle أفضل من Sql Server، وخادم Sql أفضل من Access)
اللغة المستخدمة
تعتبر الإجراءات المخزنة أفضل من عبارات SQL المستندة إلى الصفوف
استخدم المكونات المترجمة بدلاً من VB أو JavaScript، وتمتع بخبرة جيدة في برمجة ASP، مثل معالجة الأخطاء، وما إلى ذلك.
قد يتم بالفعل ملاحظة بعض العوامل المذكورة أعلاه بشكل شائع من قبل المطورين ذوي المعرفة والخبرة في IIS، ولكن البعض الآخر قد يمثل مشكلات معقدة للغاية بالنسبة لهم. في هذه المقالة، سنحاول شرح جميع العوامل التي تؤثر على أداء Asp* ودعنا نلقي نظرة على الأشياء الرئيسية التي يمكن القيام بها في المللي ثانية القليلة التي نحلقها.
حجم البرنامج النصي ASP
هل صفحة البرنامج النصي (والصفحات الأخرى) أطول من اللازم؟ وهذا شيء من شأنه أن يقلل من أداء Asp* بمجرد تنفيذه. تعد البرامج النصية لـ ASP مفيدة للحصول على المعلومات وتنسيق المخرجات، ولكن يتم أيضًا تفسير البرامج النصية سطرًا تلو الآخر، لذا كلما زاد طول البرنامج النصي، كلما استغرق تنفيذه وقتًا أطول.
إذا كان النص الخاص بك ضخمًا، ما الذي يمكنك فعله لتقليل طوله؟ وهنا بعض الاقتراحات:
هل يمكنك تحويلها إلى مكونات من جانب الخادم، أي إلى VB DLLs أو إلى مكونات غير مجمعة من خلال لغات برمجة Windows المتقدمة أو لغات واجهة COM المناسبة؟ وتسجيلهم على جانب الخادم. يمكن العثور على دليل سريع في
يمكن العثور عليه على http://www.webdevelopersjournal.com/articles/activex_for_asp.html. لا يؤدي تجميع مكون ActiveX المكتوب بشكل جيد إلى تحسين الأداء بشكل كبير فحسب، بل يمكنه أيضًا حماية البرامج (البرامج النصية) الخاصة بك، خاصة عند نشر موقع ASP الخاص بك على مضيف جهة خارجية.
ونظرًا لأنه يتم تفسير البرامج النصية سطرًا تلو الآخر، فيمكن تحسين الأداء عن طريق إزالة البرامج النصية الزائدة عن الحاجة أو إنشاء برامج نصية أكثر كفاءة. إذا كان لديك مئات الأسطر من التعليمات البرمجية في ملف ASP واحد، فمن المحتمل أنه بهذه الطريقة يمكنك فصل المستخدمين والمعاملات وخدمات البيانات بشكل جيد. في الواقع، إذا قمت بذلك، فقد تجد بعض التعليمات البرمجية الزائدة عن الحاجة: إذا كنت بحاجة إلى إخراج عدة جداول، فيمكنك كتابة دالة عامة لإخراج جدول واستدعائها عدة مرات.
عند الحديث عن حجم نصوص Asp، علينا أن نذكر حجم الملفات المضمنة. عند استخدام ملف التضمين، يتم تحميل ملف التضمين بالكامل. وعندما يتم تضمين ملف التضمين، فإنه يعادل كتابة هذا الجزء من التعليمات البرمجية في ملف Asp نفسه. لذلك، إذا قمت بتحديد الكثير من الأساليب والتعريفات الشائعة في ملف تضمين طويل، فافهم أنه عند تضمين الملف، سواء كنت تريد استخدام كل طريقة أو تعريف فيه، فسيتم تضمينه في الملف بأكمله الذي تم تحميله. يقوم ASP بتخزين جميع تعليمات التوسيع مؤقتًا، مما يقلل من كفاءة البحث. في هذه الحالة، يجب تقسيم الملف المضمن إلى ملفات معيارية أصغر. افهم أيضًا أن ملفات التضمين يتم التعامل معها على أنها طلبات صفحات منفصلة بواسطة الخادم، وأن استخدام عدد كبير جدًا من ملفات التضمين يمكن أن يؤثر على أوقات التنزيل.
<!-- #include file=Header.asp -->
<!-- #include file=Footer.asp -->
<لغة البرنامج النصي=تشغيل vbscript=الخادم>
فرعي رئيسي()
رأس الكتابة
WriteBody
كتابة التذييل
نهاية الفرعية
SubWriteBody()
...
نهاية الفرعية
رئيسي؟'إجراء الاتصال الرئيسي
</النص>
إذا كان البرنامج النصي الخاص بك طويلاً، فاستخدم Response.IsClientConnected. وهذا يعني أن وحدة المعالجة المركزية لخادمك يمكنها تجنب الانتظار في حلقة عندما لا يكون العميل متصلاً بالخادم.
<%
"تحقق مما إذا كان العميل لا يزال متصلاً."
إذا لم يكن Response.IsClientConnected ثم
"لا يزال متصلاً أيها المعالج."
آخر
'قطع الاتصال
نهاية إذا
%>
تداخل ASP وHTML
هل الجميع يفعل هذا؟ عندما نخرج الجدول، نقوم بالتحويل بين كود ASP وHTML، وهي عادة سيئة. على سبيل المثال:
<أتش تي أم أل>
<الجسم>
<%
تعيين MyConn = Server.CreateObject(ADODB.Connection)
MdbFilePath = Server.MapPath(sample.mdb)
MyConn.Open Driver={Microsoft Access Driver (*.mdb)};
SQL_query = SELECT * من الأصدقاء
تعيين RS = MyConn.Execute(SQL_query)
بينما ليس RS.EOF
%>
<LI><%=RS(الاسم)%>: <A HREF=>الصفحة الرئيسية</A>
<%
RS.MoveNext
نهاية
%>
</الجسم>
</HTML>
مثال شائع آخر هو عند استخدام عبارة IF:
<%
إذا لم تكن الجلسة (DBOpen) إذن
%>
<H1>قاعدة البيانات غير متصلة</H1>
<%
آخر
%>
<H1>قاعدة البيانات مفتوحة</H1>
<%
نهاية إذا
%>
في هذه الحالات، يمكن تحسين أداء البرنامج النصي عن طريق كتابة البرنامج النصي من جانب الخادم معًا واستخدام Response.write لإنشاء تعليمات HTML البرمجية. على سبيل المثال:
<%
إذا لم تكن الجلسة (DBOpen) إذن
الاستجابة.اكتب <H1>قاعدة البيانات غير متصلة</H1>
آخر
الاستجابة.اكتب <H1>قاعدة البيانات مفتوحة</H1>
نهاية إذا
%>
في حالة البرامج النصية الكبيرة والعديد من البرامج النصية، ستلاحظ تحسينات في الأداء. لاحظ أنه يتم تجنب استخدام العلامات <% قدر الإمكان، وذلك لتحسين الأداء ولا يحتاج ASP إلى حساب رمز Ascii للأحرف عند تنفيذ البرنامج النصي.
حالة الجلسة
ليس هناك شك في أن القدرة على الحفاظ على حالة معينة من خلال الجلسة هي ميزة قوية جدًا في ASP. ومع ذلك، يمكن أن يؤثر ذلك على أدائك*. من الواضح أن قابلية التوسع في موقعك تصبح مشكلة أخرى إذا قمت بتقييد استخدام الجلسات. ومع ذلك، تستهلك الجلسات موارد الخادم لكل مستخدم.
ماذا لو لم تستخدم متغيرات الجلسة، أو في الواقع لم تكن مضطرًا إلى ذلك؟ هل استخدام حقول النماذج المخفية وحفظ البيانات في قاعدة البيانات وسلاسل الاستعلام هو الحيلة؟ لذلك يجب عليك تعطيل حالة الجلسة. يمكنك تعطيل استخدام الجلسة من خلال العبارة التالية:
@EnableSessionState = خطأ
بهذه الطريقة، لن يقوم ASP بالتحقق من معلومات الجلسة بعد الآن.
إذا كان عليك الاعتماد على حالة الجلسة، فيجب عليك تجنب تخزين كميات كبيرة من البيانات في كائن الجلسة. سيتم الاحتفاظ بالجلسة في IIS طالما أن ملف تعريف الارتباط HTTP الخاص بالعميل متاح، مما يتسبب في انشغال الذاكرة التي تشغلها الجلسة حتى تنتهي الجلسة أو تنتهي مهلتها. بهذه الطريقة، إذا استخدم العديد من المستخدمين برنامجك في نفس الوقت، فقد يتم استنفاد موارد الخادم الخاص بك.
الوصول إلى قاعدة البيانات
الوصول إلى قاعدة البيانات أمر لا بد منه؟ سيؤدي الوصول إلى قاعدة البيانات إلى إبطاء تطبيقك بشكل كبير، ولكن من الواضح أن العديد من المواقع ستكون عديمة القيمة بدون قاعدة بيانات. ولكن من خلال الوصول إلى قاعدة البيانات من خلال الإجراءات المخزنة بدلاً من استخدام عبارات SQL المضمنة، يمكنك زيادة الأداء المحتمل. كما أنها تتمتع بمرونة جيدة* باستخدام الإجراءات المخزنة وكائنات بيانات ActiveX (ADO). كلما أمكن، قم بإخراج البيانات من الإجراءات المخزنة.
تأكد من أن قاعدة بياناتك تحتوي على فهارس، حيث سيؤدي ذلك إلى تحسين كفاءة برنامجك بشكل مباشر. حاول أيضًا تشغيل Update Statistics على خادم قاعدة البيانات الخاصة بك للمساعدة في تتبع توزيع البيانات الخاصة بك حتى تتمكن قاعدة البيانات الخاصة بك من تعديل تنفيذ الاستعلام بناءً على هذه المعلومات. لاحظ أن بعض قواعد البيانات، مثل MS Access، مقبولة حقًا في البرامج على مستوى المؤسسة؟ يعد SQL Sever 7.0 أو Oracle رهانًا أفضل.
دع SQL يعمل كما تم تصميمه لحساب البيانات وضمها وفرزها وتجميعها. عندما تتمكن من كتابة عبارة استعلام للقيام بهذه الأشياء، لا تفعل ذلك بنفسك بلغات أخرى.
فيما يلي أبسط بناء جملة لحساب جميع الأعمدة:
حدد العد (*) من الناشرين حيث الحالة = "نيويورك"
إذا قمت بحساب عمود معين، فيجب عليك استخدام المجموعة حسب العبارة لتجميع هذا العمود، وإلا فلن ينجح الأمر:
حدد العدد (المدينة)، المدينة من الناشرين، المجموعة حسب المدينة
تم إرجاع البيانات المصنفة:
حدد * من اسم الجدول حيث اسم الحقل > 50 أو اسم الحقل > 100 بالترتيب حسب اسم الحقل 2، اسم الحقل 3
هل تستخدم Odbc أو ملف DSN للاتصال بقاعدة البيانات؟ استخدم تقنية موفر OLEDB السريعة للاتصال بقاعدة البيانات الخاصة بك بدلاً من استخدام اتصال DSN. لا مزيد من مطالبة مزود خدمة الإنترنت (أو مسؤول قاعدة البيانات/مسؤول الشبكة) بإعداد DSN للنظام لك، ولا توجد تغييرات في التكوين عند نقل ملفات الويب.
يقع OLEDB بين طبقة ODBC والتطبيق. ADO هو تطبيق أعلى ODEDB في صفحات ASP الخاصة بك. يتم إرسال مكالمات ADO الخاصة بك أولاً إلى OLEDB ثم إلى طبقة ODBC. ومع ذلك، يمكنك الاتصال مباشرة بطبقة OLEDB، وإذا قمت بذلك، فسوف ترى تحسينات في الأداء من جانب الخادم. ومع ذلك، كيفية الاتصال مباشرة بـ OLEDB؟
إذا كنت تستخدم SQLServer 7، فاستخدم رمز الاتصال التالي للاتصال بقاعدة البيانات:
strConnString = DSN='';DRIVER={SQL SERVER};
UID=myuid;PWD=mypwd;
DATABASE=MyDb;SERVER=MyServer;
المعلمة الأكثر أهمية هي الجزء DRIVER=. إذا كنت تريد تجاوز ODBC والاتصال بـ SQL Server باستخدام OLEDB (وهو اتصال أسرع)، استخدم بناء الجملة التالي:
strConnString =Provider=SQLOLEDB.1;Password=mypassword;
معلومات الأمان المستمرة=True;معرف المستخدم=myuid;
الكتالوج الأولي=mydbname;
مصدر البيانات = خادمي؛ مهلة الاتصال = 15
هل هناك خطأ ما؟
ربما تتساءل الآن: ما هو الهدف من طريقة الاتصال الجديدة هذه؟ لماذا لا تستخدم نهج DSN-less/System DSN القياسي؟ حسنًا، وفقًا لنتائج اختبار Wrox في كتابه "ADO 2.0 Programmer's Reference"، إذا قارنت اتصال OLEDB مع طريقة اتصال DSN أو DSN-less، فستجد التحسينات التالية:
*يمكن المقارنة:
الوصول إلى SQL
OLEDBDSNOLEDBDSN
وقت الاتصال: 18?82؟ وقت الاتصال: 62?99
الوقت للاستعلام عن 1000 سجل: 29005400 الوقت للاستعلام عن 1000 سجل: 100950
ملاحظة: يمكن العثور على هذه النتيجة على صفحات 232 و233 من كتاب "ADO 2.0 Programmer's Reference" الخاص بـ Wrox. يتم قياس الوقت بالمللي ثانية، ويتم حساب وقت الاستعلام إلى 1000 سجل باستخدام مؤشر من جانب الخادم (لا يوجد فرق كبير في الأداء بين مجموعات سجلات OLEDB وDSN عند استخدام مؤشرات من جانب العميل).
مشكلة فك تشفير ASP:
تحقق من صحة إدخال المستخدم من جانب العميل كلما أمكن ذلك لتقليل عدد طلبات HTTP ذهابًا وإيابًا. إذا كان متصفحك لديه القدرة على دعم JavaScript أو البرامج النصية الأخرى، فاستخدم قوتها لتحرير المزيد من موارد الخادم.
يتم تشغيل VBScript التالي في متصفح العميل للتحقق من صحة معلومات المستخدم قبل إرسالها إلى الخادم الخاص بك:
<لغة البرنامج النصي=VBScript>
<!--
الفرعية btnEnter_OnClick
DimTheForm
قم بتعيين TheForm = Document.MyForm
إذا كان IsNumeric(TheForm.Age.Value) إذن
النموذج.إرسال
آخر
Msgbox الرجاء إدخال العمر الرقمي.
انتهي إذا
نهاية الفرعية
//-->
</النص>
<FORMmethod=POST name=MyFormaction=myfile.asp> الاسم: <INPUT typr=text name=Name>
العمر: <نوع الإدخال=اسم النص=العمر>
<نوع الإدخال=اسم الزر=btnEntervalue=إدخال>
</نموذج>
استخدم المتغيرات المحلية وتجنب المتغيرات العالمية. يتم الوصول إلى المتغيرات المحلية بشكل أسرع بواسطة محرك البرنامج النصي Asp مقارنة بالمتغيرات العامة لأن مجال الاسم بالكامل لا يحتاج إلى البحث. تجنب تغيير تعريفات المصفوفة. يعد تخصيص حجم كافٍ أثناء التهيئة الأولى أكثر فعالية. في هذه الحالة، قد تضيع بعض الذاكرة، لكنك تكتسب ميزة السرعة. من الواضح أن هذه التقنية فعالة عندما يكون الخادم تحت ضغط كبير.
إذا كنت بحاجة إلى الإشارة إلى كائن غير مستخدم بالضرورة، فمن الأفضل استخدام علامة <OBJECT> بدلاً من استخدام الأسلوب Server.CreateObject. يؤدي استخدام Server.CreateObject إلى إنشاء الكائن على الفور، وعلى العكس من ذلك، فإن العلامة <OBJECT> لا تقوم بإنشاء الكائن على الفور. إذا لم تستخدم الكائن بعد تعريفه باستخدام <object>، فلن تضيع الموارد.
على سبيل المثال: يستخدم المثال التالي علامة <OBJECT> لإنشاء تنفيذ كائن Ad Rotator لعجلة الإعلان على نطاق التطبيق.
مثال:
<OBJECT runat=نطاق الخادم=معرف التطبيق=MyAds progid=MSWC.AdRotator>
</الكائن>
بعد تخزين كائن Ad Rotator في التطبيق، يمكنك الوصول إلى الكائن في أي صفحة برنامج باستخدام بناء الجملة التالي
<%=MyAds.GetAdvertisement(CustomerAds.txt) %>
قم بتشغيل مفتاح "الخيار الصريح". في VB وVBScript، يمكنك استخدام المتغيرات دون إعلان صريح. لكن تشغيل هذا الخيار يمكن أن يحدد ويحدد المتغيرات، مما يمكنه كتابة المتغيرات بشكل جيد ويساعد في تحسين الأداء. تكون المتغيرات المحلية غير المحددة أبطأ لأنه يجب البحث في مساحة الاسم لمعرفة ما إذا كان المتغير موجودًا قبل إنشائه. تخلص منه واجعل كل متغير محددًا بشكل واضح (حدد أولاً، استخدمه لاحقًا).
هذه عادة جيدة، وقد تصلح الأخطاء المطبعية، وهي أسرع.
ما لم تكن بحاجة حقًا إلى استخدامه، فلا تستخدم أسلوب Server.MapPath. استخدم المسار الحقيقي إذا كنت تعرفه. يتطلب استخدام MapPath أن يقوم IIS باسترداد مسار الخادم الحالي، مما يعني أنه يجب إرسال طلب خاص إلى الخادم، مما يعني انخفاض الأداء. هناك طريقة أخرى وهي تخزين المسار في متغير محلي واستخدامه عند الحاجة، بحيث لا يحتاج الخادم إلى البحث عدة مرات.
تحقق كيف حالك
يمكنك قياس أداء نظامك من خلال أدوات مثل System Performance Monitor وnetMon وPerfMon. لاختبار أداء الويب*، يمكنك استخدام WCAT (أداة تحليل سعة الويب). باستخدام WCAT، يمكنك اختبار قدرة خادم IIS وتكوين الشبكة على الاستجابة لمجموعة واسعة من طلبات العملاء أو البيانات أو صفحات HTML. يمكن استخدام نتائج الاختبار هذه كدليل لتحسين تكوينات الخادم والشبكة لديك. تم تصميم WCAT خصيصًا لتقدير مقدار عبء عمل العميل الذي يمكن لخدمات الإنترنت في نظام التشغيل Windows 2000 (أو Windows NT) وIIS الاستجابة له.
(محاكاة). لمزيد من المعلومات، راجع IIS Resource Kit. يوجد أيضًا دليل مستخدم WCAT مطول على موقع MSDN Online Web sorkshop مع رابط تنزيل. إذا كنت جادًا بشأن قدرات Asp* الخاصة بك، فتأكد من الحصول على هذه الأداة.
احرص على تحسين أداء التطبيق وسيعمل تطبيق الويب الخاص بك بسلاسة أكبر. لا تؤثر على أداء الخادم إذا لم تكن بحاجة إليه حقًا.
يستخدم asp الإجراءات المخزنة لتنفيذ ترحيل البيانات
1. قم بإنشاء جدول tiku_koushi
إذا كان موجودًا (اختر * من dbo.sysobjects حيث المعرف =
object_id(N'[dbo].[tiku_koushi]') وOBJECTPROPERTY
(المعرف، N'IsUserTable') = 1)
إسقاط الجدول [dbo].[tiku_koushi]
يذهب
إنشاء جدول [dbo].[tiku_koushi] (
[id] [int] الهوية (1، 1) ليست فارغة،
[عنوان] [فارتشار] (250) تجميع
الصينية_PRC_CI_AS NULL ,
[list2_id] [char] (10) الترتيب
الصينية_PRC_CI_AS NULL
) على [الابتدائية]
يذهب
2. الإجراء المخزن sp_c
إنشاء بروك sp_c
@ اسم الجدول فارشار (50)،
@ العنوان فارشار (250)،
@list2_id فارتشار(50)
مثل
إذا @tablename='tiku_koushi'
حدد العد (*) من tiku_koushi حيث يكون العنوان مثل '%'+@title+'%' وlist2_id=@list2_id
يذهب
3. الإجراء المخزن sp_search_tiku
إنشاء إجراء sp_search_tiku
@ اسم الجدول فارشار (50)،
@ العنوان فارشار (250)،
@list2_id فارشار (10)،
@pagesize int،
@صفحة كثافة العمليات
مثل
إذا @tablename='tiku_koushi'
يبدأ
أعلن @ks int
أعلن @str varchar (200)
تعيين @ks=@pagesize*(@page-1)
إذا لم يكن موجودًا (اختر * من dbo.sysobjects حيث id = object_id(N'[dbo].[temp_table91]') وOBJECTPROPERTY(id, N'IsUserTable') = 1)
يبدأ
حدد * في temp_table91 من tiku_koushi حيث
عنوان مثل ترتيب '%'+@title+'%' وlist2_id=@list2_id
بواسطة معرف الوصف
تعيين عدد الصفوف @pagesize
اضبط @str='select * من temp_table91 حيث لا يوجد المعرف
(اختر المعرف العلوي '+str(@ks)+' من temp_table91)'
تنفيذ (@ شارع)
إسقاط الجدول temp_table91
نهاية
نهاية
يذهب
4.search_koushi.asp
<!-- #include file=conn.asp -->
<%
السطر=6
إذا كان الطلب (الصفحة) = إذن
الصفحة=1
آخر
صفحة=طلب(صفحة)
نهاية إذا
إذا كانت الصفحة <1 ثم
الصفحة=1
نهاية إذا
العنوان = تقليم (طلب (العنوان))
list2_id=trim(request(list2_id))
تعيين rs2=conn.execute(sp_c 'tiku_koushi','&title&','&list2_id&')
عدد الصفحات=CInt(rs2(0)/السطر)
if(CInt(rs2(0)) mod line)=0 إذن
عدد الصفحات = عدد الصفحات
آخر
عدد الصفحات=عدد الصفحات+1
نهاية إذا
إذا كان CInt(page)>=pagecount إذن
الصفحة = CInt (عدد الصفحات)
نهاية إذا
شارع =
str=str&page=&page&&title=&title&&list2_id=&list2_id
تعيين rs=conn.execute
(sp_search_tiku 'tiku_koushi','&title&','&list2_id&','&line&','&CInt(page)&')
إذا rs.eof بعد ذلك
استجابة.اكتب أي سجل
آخر
%>
<أتش تي أم أل>
<الرأس>
<نوع النمط=نص/css>
تد {حجم الخط: 12px؛}
أ {زخرفة النص: لا شيء؛}
</نمط>
<لغة البرنامج النصي=جافا سكريبت>
</script>
</الرأس>
<الجسم>
<عرض الجدول=518 حد=1 bordercolorlight=000000
bordercolordark=#ffffff
محاذاة = حشوة الخلية المركزية = 0 تباعد الخلايا = 0>
<!--DWLayoutTable-->
<tr bgcolor=#dfdfdf>
<td width=454 align=center height=24 valign=middle>أسئلة الامتحان الشفهي</td>
<td width=63 align=center valign=middle>حذف</td>
</tr>
<% افعل حتى rs.eof %>
<ارتفاع tr=22>
<td valign=middle>·<a href=void(0)
onclick=window.open('editkoushi.asp?id=<%=rs(id)%>&page=<%=page%>&title=<%=title%>&list2_id=<%=list2_id%>','' ، العرض = 518
الارتفاع = 160 اليسار = 100 بوصة)>
<%=rs(العنوان)%></a></td>
<td align=center valign=middle>حذف</td>
</tr>
<%
rs.movenext
حلقة
%>
<tr align=left valign=bgcolor الأوسط=efeff6
الارتفاع = 22>
<td colspan=2 style=padding-left:6px;>
<a href=search_koushi.asp?page=<%=1%>&title=<%=title%>&list2_id=<%=list2_id%>>الصفحة الرئيسية</a> <a
href=search_koushi.asp?page=<%=page-1%>&title=<%=title%>&list2_id=<%=list2_id%>>الصفحة السابقة</a> <a
href=search_koushi.asp?page=<%=page+1%>&title=<%=title%>&list2_id=<%=list2_id%>>الصفحة التالية</a> <a
href=search_koushi.asp?page=<%=pagecount%>&title=<%=title%>&list2_id=<%=list2_id%>>الصفحة الأخيرة</a>
إجمالي <%=pagecount%> من الصفحات. الصفحة الحالية هي: <%=page%>/<%=pagecount%> من الصفحات
يوجد <%=rs2(0)%> سجلات إجمالاً</td>
</tr>
</الجدول>
</الجسم>
</html>
<%
rs2.إغلاق
تعيين rs2 = لا شيء
rs. Close
تعيين RS=لا شيء
نهاية إذا
%>