الفكرة الرئيسية: استخدم عبارة واحدة لحساب عدد السجلات (دون الحصول على سمة عدد السجلات أثناء الاستعلام)، وتخزينها مؤقتًا في ملفات تعريف الارتباط، ولا تحتاج إلى العد مرة أخرى عند القفز. استخدم سمة الصفحة المطلقة للانتقال إلى الصفحة. من أجل الراحة، تم الاتصال بالصف وكتابته، وتم شرح الأجزاء الرئيسية من الكود
بيئة الأجهزة: AMD Athlon XP 2600+، 256 DDR
بيئة البرمجيات: MS Windows 2000 Advanced Server + IIS 5.0 + Access 2000 + ie 6.0
نتائج الاختبار: وقت التشغيل الأولي هو 250 (الصفحة الرئيسية) - 400 (الصفحة الأخيرة) ميلي ثانية، (بعد تخزين رقم السجل مؤقتًا)، يكون الانتقال بين الصفحات ثابتًا عند أقل من 47 مللي ثانية لا تستغرق الصفحة أكثر من 350 مللي ثانية.
نطاق التطبيق: يستخدم للترحيل العادي، غير مناسب للاستعلامات الأكثر تعقيدًا: إذا كان الشرط هو [العنوان] مثل %favorite%، فسيتم زيادة وقت الاستعلام بشكل كبير، حتى إذا تم فهرسة حقل العنوان، فسيكون عديم الفائدة: (
<%@language = صفحة رموز vbscript=936%>
<%الخيار صريح%>
<%
خافت intdatestart
intdatestart = الموقت ()
rem ## فتح اتصال قاعدة البيانات
rem ########################################################################################### ###############
الدالة f__openconn()
خافت strdbpath
خافت كونستر
strdbpath = ../db/test.mdb
connstr = Provider=microsoft.jet.oledb.4.0;مصدر البيانات=
connstr = connstr & server.mappath(strdbpath)
تعيين conn = server.createobject(adodb.connection)
conn.open connstr
وظيفة النهاية
rem ########################################################################################### ###############
rem ## إغلاق اتصال قاعدة البيانات
rem ########################################################################################### ###############
الدالة f__Closeconn()
إذا كان isobject(conn) ثم
conn. Close
نهاية إذا
مجموعة كون = لا شيء
وظيفة النهاية
rem ########################################################################################### ###############
rem يحصل على وقت التنفيذ
rem ########################################################################################### ###############
وظيفة gettimeover (iflag)
مع مرور الوقت خافت
إذا iflag = 1 ثم
ttimeover = formatnumber(timer() - intdatestart, 6, true)
gettimeover = وقت التنفيذ: & ttimeover & ثواني
آخر
ttimeover = formatnumber((timer() - intdatestart) * 1000, 3, true)
gettimeover = وقت التنفيذ: & ttimeover & ميلي ثانية
نهاية إذا
وظيفة النهاية
########################################################################################### ###############
فئة cls_pageview
sbooinitstate الخاصة
اسم ملف تعريف الارتباط الخاص
sstrpageurl الخاص
sstrpagevar الخاص
اسم الجدول الخاص
قائمة sstrfields الخاصة
حالة خاصة
قائمة الطلبات الخاصة
مفتاح sstrprimarykey الخاص
sintrefresh الخاص
عدد السجلات الخاص
حجم الصفحات الخاصة
sintpagenow الخاص
sintpagemax الخاص
sobjconn الخاص
معلومات sstrpageinfo الخاصة
فئة فرعية خاصة_تهيئة
استدعاء كليرفار ()
النهاية الفرعية
فئة فرعية خاصة_إنهاء ()
تعيين sobjconn = لا شيء
النهاية الفرعية
Clearvars الفرعية العامة ()
sbooinitstate = false
sstrcookiesname=
sstrpageurl=
sstrpagevar = page
sstrtablename =
سسترفيلدسليست =
sstrcondiction =
قائمة سستروردير =
sstrprimarykey=
سينتريريفريش=0
عدد السجلات = 0
سينتباجيسيز = 0
sintpagenow=0
سينتباجيماكس=0
النهاية الفرعية
rem ## متغير ملفات تعريف الارتباط الذي يحمل عدد السجلات
الملكية العامة تسمح بـ strcookiesname(value)
sstrcookiesname = value
الملكية النهائية
rem ## عنوان إعادة التوجيه
الملكية العامة تسمح بـ strpageurl(value)
sstrpageurl = value
الملكية النهائية
rem ## اسم الجدول
السماح للملكية العامة بـ strtablename (القيمة)
sstrtablename = value
الملكية النهائية
rem ## قائمة الحقول
الملكية العامة تسمح بقائمة strfieldslist (القيمة)
sstrfieldslist = value
الملكية النهائية
rem ## شروط الاستعلام
الملكية العامة تسمح بالربط (القيمة)
إذا كانت القيمة <> إذن
sstrcondiction = أين & القيمة
آخر
sstrcondiction =
نهاية إذا
الملكية النهائية
rem ## فرز الحقول، مثل: [id] asc، [createdatetime] desc
الملكية العامة تسمح لقائمة strorderlist (القيمة)
إذا كانت القيمة <> إذن
sstrorderlist = الترتيب حسب القيمة
آخر
قائمة سستروردير =
نهاية إذا
الملكية النهائية
rem ## الحقل المستخدم لحساب عدد السجلات
السماح للملكية العامة بـ strprimarykey (القيمة)
sstrprimarykey = value
الملكية النهائية
rem ## عدد السجلات المعروضة في كل صفحة
تسمح الخاصية العامة بـ intpagesize(value)
سينتباجيسيز = تونوم (القيمة، 20)
الملكية النهائية
rem ## كائن اتصال قاعدة البيانات
السماح للملكية العامة بـ objconn (القيمة)
تعيين sobjconn = القيمة
الملكية النهائية
rem ## الصفحة الحالية
السماح للملكية العامة بـ intpagenow(value)
سينتباجيناو = تونوم (القيمة، 1)
الملكية النهائية
rem ## معلمات الصفحة
الملكية العامة تسمح بـ strpagevar(value)
sstrpagevar = value
الملكية النهائية
rem ## ما إذا كان سيتم التحديث 1 يعني التحديث، والقيم الأخرى لا يتم تحديثها
الملكية العامة تسمح بالتحديث (القيمة)
سينتريريفريش = تونوم (القيمة، 0)
الملكية النهائية
rem ## احصل على الصفحة الحالية
الملكية العامة تحصل على intpagenow()
intpagenow =singpagenow
الملكية النهائية
rem ## معلومات ترقيم الصفحات
الملكية العامة تحصل على strpageinfo()
strpageinfo = sstrpageinfo
الملكية النهائية
rem ## احصل على مجموعة السجلات أو المصفوفة أو السلسلة ثنائية الأبعاد، ويجب عليك استخدام isarray() للحكم عند تنفيذ إخراج الحلقة
الملكية العامة تحصل على arrrecordinfo()
إن لم يكن sbooinitstate بعد ذلك
خاصية الخروج
نهاية إذا
المخفتات، SQL
SQL = حدد & sstrfieldslist & _
من & sstrtablename & _
حالة&_
com.sstrorderlist
مجموعة rs = server.createobject(adodb.recordset)
rs.open SQL، سوبجكون، 1، 1
إذا لم يكن (rs.eof أو rs.bof) إذن
rs.pagesize = sintpagesize
rs.absolutepage = sintpagenow
إذا لم يكن (rs.eof أو rs.bof) إذن
أريكوردينفو = rs.getrows(sintpagesize)
آخر
arrrecordinfo=
نهاية إذا
آخر
arrrecordinfo=
نهاية إذا
rs. Close
setrs=لا شيء
الملكية النهائية
rem ## تهيئة عدد السجلات
initrecordcount الفرعي الخاص ()
عدد السجلات = 0
إذا لم يكن (sbooinitstate) ثم الخروج من الباطن
خافت sinttmp
sinttmp = tonum(request.cookies(_xp_ & sstrcookiesname), -1)
إذا ((sinttmp < 0) أو (sintrefresh = 1)) ثم
SQL خافت، روبية
sql = حدد العد( & sstrprimarykey & ) & _
من & sstrtablename & _
com.sstrcondiction
مجموعة rs = sobjconn.execute (sql)
إذا rs.eof أو rs.bof ذلك الحين
سينتمب = 0
آخر
سينتمب = روبية (0)
نهاية إذا
sintrecordcount = sinttmp
Response.cookies(_xp_ & sstrcookiesname) = sinttmp
آخر
sintrecordcount = sinttmp
نهاية إذا
النهاية الفرعية
rem ## تهيئة معلومات الترحيل
initpageinfo الفرعي الخاص ()
sstrpageinfo=
إذا لم يكن (sbooinitstate) ثم الخروج من الباطن
خافت
surl = sstrpageurl
إذا instr(1, surl, ?, 1) > 0 ثم
surl = surl & & & sstrpagevar & =
آخر
surl = surl & ? & sstrpagevar & =
نهاية إذا
إذا كان sintpagenow <= 0 ثم sintpagenow = 1
إذا كان معدل sintrecordcount mod sintpagesize = 0
sintpagemax = sintrecordcount\sintpagesize
آخر
sintpagemax = sintrecordcount \ sintpagesize + 1
نهاية إذا
إذا كان sintpagenow > sintpagemax ثم sintpagenow = sintpagemax
إذا كان sintpagenow <= 1 ثم
sstrpageinfo = الصفحة الرئيسية الصفحة السابقة
آخر
sstrpageinfo = sstrpageinfo & <a href= & surl & 1>الصفحة الرئيسية</a>
sstrpageinfo = sstrpageinfo & <a href= & surl & (sintpagenow - 1) & >الصفحة السابقة</a>
نهاية إذا
إذا كان sintpagemax - sintpagenow < 1 ثم
sstrpageinfo = sstrpageinfo والصفحة التالية والصفحة الأخيرة
آخر
sstrpageinfo = sstrpageinfo & <a href= & surl & (sintpagenow + 1) & >الصفحة التالية</a>
sstrpageinfo = sstrpageinfo & <a href= & surl & sintpagemax & >الصفحة الأخيرة</a>
نهاية إذا
sstrpageinfo = sstrpageinfo & الصفحة: <strong><font color=#990000> & sintpagenow & </font> / & sintpagemax & </strong>
sstrpageinfo = sstrpageinfo & الإجمالي<strong> & sintrecordcount & </strong> السجلات<strong> & sintpagesize & </strong> السجلات/الصفحة
النهاية الفرعية
rem ## تحويل عدد صحيح طويل
عدد طن (أرقام) الوظيفة الخاصة، الافتراضي)
ق = ق &
إذا كان s <> وغير رقمي (ق) إذن
طن = clng(s)
آخر
tonum=default
نهاية إذا
وظيفة النهاية
rem ## تهيئة الفصل
initclass العامة ()
sbooinitstate = true
إذا لم يكن (isobject(sobjconn)) ثم sbooinitstate = false
استدعاء initrecordcount()
استدعاء initpageinfo ()
النهاية الفرعية
نهاية الطبقة
خافت strlocalurl
strlocalurl = request.servervariables(script_name)
خافت intpagenow
intpagenow = request.querystring(page)
خافت intpagesize، strpageinfo
حجم intpage=30
معلومات تسجيل الدخول المعتمة، أنا
كون خافت
f__openconn
com.dimclsrecordinfo
تعيين clsrecordinfo = جديد cls_pageview
clsrecordinfo.strtablename = [mytable]
clsrecordinfo.strpageurl = strlocalurl
clsrecordinfo.strfieldslist = [المعرف]، [العنوان]، [آخر مرة]
clsrecordinfo.strcondiction = [المعرف] < 10000
clsrecordinfo.strorderlist = [id] تصاعدي
clsrecordinfo.strprimarykey = [المعرف]
clsrecordinfo.intpagesize = 20
clsrecordinfo.intpagenow = intpagenow
clsrecordinfo.strcookiesname = عدد السجلات
clsrecordinfo.strpagevar = page
clsrecordinfo.intrefresh = 0
clsrecordinfo.objconn = conn
clsrecordinfo.initclass
arrrecordinfo = clsrecordinfo.arrrecordinfo
strpageinfo = clsrecordinfo.strpageinfo
setclsrecordinfo=لا شيء
f__Closeconn
%>
<أتش تي أم أل>
<الرأس>
<meta http-equiv=content-type content=text/html;
<title>اختبار الترحيل</title>
<نوع النمط=نص/css>
<!--
عرض الصفحة {
حجم الخط: 12 بكسل؛
}
عرض الصفحة تد {
نمط الحدود اليمنى: صلب؛
نمط الحدود السفلية: صلب؛
لون الحدود الأيمن: #e0e0e0;
لون الحدود السفلية: #e0e0e0;
عرض الحدود اليمنى: 1 بكسل؛
عرض الحد السفلي: 1 بكسل؛
}
جدول عرض الصفحة {
نمط الحدود اليسرى: صلب؛
نمط الحدود الأعلى: صلب؛
لون الحدود اليسرى: #e0e0e0؛
لون الحدود العلوي: #e0e0e0؛
عرض الحد العلوي: 1 بكسل؛
عرض الحدود اليسرى: 1 بكسل؛
}
رأس الصفحة {
الخلفية: #eff7ff؛
حجم الخط: 14 بكسل؛
وزن الخط: غامق؛
ارتفاع الخط: 120%؛
محاذاة النص: مركز؛
}
-->
</نمط>
<نوع النمط=نص/css>
<!--
جسم {
حجم الخط: 12 بكسل؛
}
أ: الرابط {
اللون: #993300؛
زخرفة النص: لا شيء؛
}
أ:زار {
اللون: #003366؛
زخرفة النص: لا شيء؛
}
أ:تحوم {
اللون: #0066cc؛
زخرفة النص: تسطير؛
}
أ:نشط {
اللون: #000000؛
زخرفة النص: لا شيء؛
}
طاولة {
حجم الخط: 12 بكسل؛
}
-->
</نمط>
</الرأس>
<الجسم>
<عرض الجدول=100% حد=0 تباعد الخلايا=0 خلية الحشو=4>
<تر>
<td> <%= strpageinfo%></td>
</tr>
</الجدول>
<div class=pageview>
<عرض الجدول=100% حد=0 تباعد الخلايا=0 خلية الحشو=4>
<tr class=header>
<td>المعرف</td>
<td>الوصف</td>
<td>التاريخ</td>
</tr>
<%
إذا كان isarray(arrrecordinfo) إذن
لأني = 0 إلى ubound(arrrecordinfo, 2)
%>
<تر>
<td> <%= arrrecordinfo(0, i)%></td>
<td> <%= arrrecordinfo(1, i)%></td>
<td> <%= arrrecordinfo(2, i)%></td>
</tr>
<%
التالي
نهاية إذا
%>
</الجدول>
</div>
<عرض الجدول=100% حد=0 تباعد الخلايا=0 خلية الحشو=4>
<تر>
<td> <%= strpageinfo%></td>
</tr>
</الجدول>
<عرض الجدول=100% حدود=0 تباعد الخلايا=0 خلية الحشو=4>
<تر>
<td align=center> <%= gettimeover(1)%></td>
</tr>
</الجدول>
</الجسم>
</html>