แนวคิดหลัก: ใช้คำสั่งเดียวเพื่อนับจำนวนระเบียน (โดยไม่ได้รับแอตทริบิวต์จำนวนระเบียนในระหว่างการสืบค้น) แคชไว้ในคุกกี้ และไม่จำเป็นต้องนับอีกครั้งเมื่อกระโดด ใช้แอตทริบิวต์หน้าสัมบูรณ์ของ ado เพื่อข้ามไปที่หน้า เพื่อความสะดวก เรียกและเขียนเป็นคลาสโดยมีการอธิบายส่วนหลักของโค้ดแล้ว
สภาพแวดล้อมของฮาร์ดแวร์: amd athlon xp 2600+, 256 ddr
สภาพแวดล้อมซอฟต์แวร์: เซิร์ฟเวอร์ขั้นสูง ms windows 2000 + iis 5.0 + เข้าถึง 2000 + เช่น 6.0
ผลการทดสอบ: เวลารันเริ่มต้นคือ 250 (โฮมเพจ) - 400 (หน้าสุดท้าย) มิลลิวินาที (หลังจากหมายเลขบันทึกถูกแคช) การข้ามระหว่างเพจจะเสถียรที่น้อยกว่า 47 มิลลิวินาที การข้ามจากหน้าแรกไปยังหน้าสุดท้าย เพจใช้เวลาไม่เกิน 350 มิลลิวินาที
ขอบเขตการใช้งาน: ใช้สำหรับการสืบค้นแบบธรรมดา ไม่เหมาะสำหรับการสืบค้นที่ซับซ้อนมากขึ้น: หากเงื่อนไขเป็น [title] เช่น %favorite% เวลาการสืบค้นจะเพิ่มขึ้นอย่างมาก แม้ว่าฟิลด์หัวเรื่องจะถูกจัดทำดัชนี แต่ก็จะไม่มีประโยชน์ (
<%@ภาษา = โค้ดเพจ vbscript=936%>
<%ตัวเลือกที่ชัดเจน%>
-
intdatestart สลัว
intdatestart = ตัวจับเวลา ()
rem ## เปิดการเชื่อมต่อฐานข้อมูล
########################################################################## # ###############
ฟังก์ชั่น f__openconn()
strdbpath สลัว
คอนทราสสลัว
strdbpath = ../db/test.mdb
connstr = ผู้ให้บริการ=microsoft.jet.oledb.4.0;แหล่งข้อมูล=
connstr = connstr & server.mappath (strdbpath)
ตั้งค่า conn = server.createobject (adodb.connection)
conn.open constr
ฟังก์ชั่นสิ้นสุด
########################################################################## # ###############
rem ## ปิดการเชื่อมต่อฐานข้อมูล
########################################################################## # ###############
ฟังก์ชั่น f__closeconn()
ถ้า isobject(conn) แล้ว
เชื่อมต่อปิด
สิ้นสุดถ้า
ตั้ง conn = ไม่มีอะไร
ฟังก์ชั่นสิ้นสุด
########################################################################## # ###############
rem ได้รับเวลาดำเนินการ
########################################################################## # ###############
ฟังก์ชั่น gettimeover (iflag)
หมดเวลาสลัว
ถ้า iflag = 1 แล้ว
ttimeover = formatnumber (ตัวจับเวลา () - intdatestart, 6, จริง)
gettimeover = เวลาดำเนินการ: & ttimeover & วินาที
อื่น
ttimeover = formatnumber ((ตัวจับเวลา () - intdatestart) * 1,000, 3, จริง)
gettimeover = เวลาดำเนินการ: & ttimeover & มิลลิวินาที
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
########################################################################## # ###############
คลาส cls_pageview
sbooinitstate ส่วนตัว
sstrcookiesname ส่วนตัว
sstrpageurl ส่วนตัว
sstrpagevar ส่วนตัว
ชื่อ sstrtable ส่วนตัว
sstrfieldslist ส่วนตัว
การควบคุมส่วนตัว
รายชื่อสตรอเดอร์ส่วนตัว
sstrprimarykey ส่วนตัว
ซินเทรเฟรชส่วนตัว
sintrecordcount ส่วนตัว
ขนาดเพจส่วนตัว
เพจส่วนตัวตอนนี้
sinpagemax ส่วนตัว
ส่วนตัว sobjconn
sstrpageinfo ส่วนตัว
class_initialize ส่วนตัวย่อย
โทร clearvars()
จบย่อย
class_terminate ส่วนตัว ()
ตั้ง sobjconn = ไม่มีอะไร
จบย่อย
clearvars ย่อยสาธารณะ ()
sbooinitstate = เท็จ
sstrcookiesname=
sstrpageurl=
sstrpagevar = หน้า
sstrtablename=
sstrfieldslist =
การควบคุมที่เข้มงวด =
สตรอเดอร์ลิสต์ =
sstrprimarykey=
ซินเทรเฟรช=0
ซินเทรคอร์ดนับ = 0
ขนาดเพจ=0
ซินเพจนาว=0
ซินเพจแม็กซ์=0
จบย่อย
rem ## ตัวแปรคุกกี้ที่เก็บจำนวนเรคคอร์ด
ทรัพย์สินสาธารณะให้ stcookiesname (ค่า)
sstrcookiesname = ค่า
ทรัพย์สินสุดท้าย
rem ## ที่อยู่การเปลี่ยนเส้นทาง
ทรัพย์สินสาธารณะให้ strpageurl (ค่า)
sstrpageurl = ค่า
ทรัพย์สินสุดท้าย
rem ## ชื่อตาราง
ทรัพย์สินสาธารณะให้ strtablename (ค่า)
sstrtablename = ค่า
ทรัพย์สินสุดท้าย
rem ## รายการฟิลด์
ทรัพย์สินสาธารณะให้ strfieldslist (ค่า)
sstrfieldslist = ค่า
ทรัพย์สินสุดท้าย
rem ## เงื่อนไขการค้นหา
ทรัพย์สินสาธารณะให้ strcondiction (ค่า)
ถ้าค่า <> แล้ว
sstrcondiction = ที่ไหน & ค่า
อื่น
การควบคุมที่เข้มงวด =
สิ้นสุดถ้า
ทรัพย์สินสุดท้าย
rem ## ฟิลด์การเรียงลำดับ เช่น: [id] asc, [createdatetime] desc
ทรัพย์สินสาธารณะให้ stroderlist (ค่า)
ถ้าค่า <> แล้ว
sstrorderlist = เรียงลำดับตาม & ค่า
อื่น
สตรอเดอร์ลิสต์ =
สิ้นสุดถ้า
ทรัพย์สินสุดท้าย
rem ## ฟิลด์ที่ใช้นับจำนวนเรคคอร์ด
ทรัพย์สินสาธารณะให้ strprimarykey (ค่า)
sstrprimarykey = ค่า
ทรัพย์สินสุดท้าย
rem ## จำนวนบันทึกที่แสดงในแต่ละหน้า
ทรัพย์สินสาธารณะให้ intpagesize (ค่า)
sintpagesize = tonum (ค่า, 20)
ทรัพย์สินสุดท้าย
rem ## วัตถุการเชื่อมต่อฐานข้อมูล
ทรัพย์สินสาธารณะให้ objconn (มูลค่า)
ตั้งค่า sobjconn = ค่า
ทรัพย์สินสุดท้าย
rem ## หน้าปัจจุบัน
ทรัพย์สินสาธารณะให้ intpagenow (มูลค่า)
sintpagenow = tonum (ค่า 1)
ทรัพย์สินสุดท้าย
rem ## พารามิเตอร์หน้า
ทรัพย์สินสาธารณะให้ strpagevar (ค่า)
sstrpagevar = ค่า
ทรัพย์สินสุดท้าย
rem ## ไม่ว่าจะรีเฟรช 1 หมายถึงรีเฟรช ส่วนค่าอื่นๆ ไม่รีเฟรช
ทรัพย์สินสาธารณะให้ intrefresh (มูลค่า)
sintrefresh = โทนัม (ค่า, 0)
ทรัพย์สินสุดท้าย
rem ## รับหน้าปัจจุบัน
ทรัพย์สินสาธารณะรับ intpagenow()
intpagenow = singpagenow
ทรัพย์สินสุดท้าย
rem ## ข้อมูลการแบ่งหน้า
ทรัพย์สินสาธารณะรับ strpageinfo()
strpageinfo = sstrpageinfo
ทรัพย์สินสุดท้าย
rem ## รับชุดบันทึก อาร์เรย์สองมิติหรือสตริง คุณต้องใช้ isarray() เพื่อตัดสินเมื่อดำเนินการเอาท์พุตลูป
ทรัพย์สินสาธารณะรับ arrrecordinfo()
ถ้าไม่ใช่ sbooinitstate แล้ว
ออกจากทรัพย์สิน
สิ้นสุดถ้า
หรี่แสง, sql
sql = เลือก & sstrfieldslist & _
จาก & sstrtablename & _
การควบคุมที่เข้มงวด&_
สตรอเดอร์ลิสต์
ชุด rs = server.createobject (adodb.recordset)
rs.open sql, sobjconn, 1, 1
ถ้าไม่ใช่ (rs.eof หรือ rs.bof) แล้ว
rs.pagesize = ซินต์เพจขนาด
rs.absolutepage = sintpagenow
ถ้าไม่ใช่ (rs.eof หรือ rs.bof) แล้ว
arrrecordinfo = rs.getrows(sintpagesize)
อื่น
arrrecordinfo=
สิ้นสุดถ้า
อื่น
arrrecordinfo=
สิ้นสุดถ้า
฿.ปิด
setrs=ไม่มีอะไร
ทรัพย์สินสุดท้าย
rem ## เริ่มต้นจำนวนบันทึก
initrecordcount ย่อยส่วนตัว ()
ซินเทรคอร์ดนับ = 0
ถ้าไม่ใช่ (sbooinitstate) ให้ออกจากย่อย
บาปมืดมน
sinttmp = tonum(request.cookies(_xp_ & sstrcookiesname), -1)
ถ้า ((sinttmp < 0) หรือ (sintrefresh = 1))แล้ว
sql สลัว, อาร์เอส
sql = เลือกจำนวน ( & sstrprimarykey & ) & _
จาก & sstrtablename & _
การควบคุมที่เข้มงวด
ตั้งค่า rs = sobjconn.execute (sql)
ถ้า rs.eof หรือ rs.bof แล้ว
ซินท์เอ็มพี = 0
อื่น
ซินท์เอ็มพี = อาร์เอส(0)
สิ้นสุดถ้า
sintrecordcount = sinttmp
response.cookies(_xp_ & sstrcookiesname) = sinttmp
อื่น
sintrecordcount = sinttmp
สิ้นสุดถ้า
จบย่อย
rem ## เริ่มต้นข้อมูลเพจ
initpageinfo ส่วนตัวย่อย ()
sstrpageinfo=
ถ้าไม่ใช่ (sbooinitstate) ให้ออกจากย่อย
URL สลัว
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 ## การแปลงจำนวนเต็มยาว
tonum ฟังก์ชั่นส่วนตัว (s, ค่าเริ่มต้น)
ส = ส &
ถ้า s <> และเป็นตัวเลขแล้ว
tonum = clng (s)
อื่น
tonum=ค่าเริ่มต้น
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
rem ## การเริ่มต้นคลาส
initclass ย่อยสาธารณะ ()
sbooinitstate = จริง
ถ้าไม่ใช่ (isobject (sobjconn)) ดังนั้น sbooinitstate = false
โทร initrecordcount()
โทร initpageinfo()
จบย่อย
จบคลาส
strlocalurl สลัว
strlocalurl = request.servervariables (script_name)
หน้าเพจสลัวๆ
intpagenow = request.querystring (หน้า)
intpagesize สลัว strpageinfo
ขนาดหน้าเพจ=30
ข้อมูลบันทึกที่สลัวฉัน
การเชื่อมต่อแบบสลัว
f__openconn
dimclsrecordinfo.php
ตั้งค่า clsrecordinfo = cls_pageview ใหม่
clsrecordinfo.strtablename = [ตารางของฉัน]
clsrecordinfo.strpageurl = strlocalurl
clsrecordinfo.strfieldslist = [id], [ชื่อ], [ครั้งล่าสุด]
clsrecordinfo.strcondiction = [id] < 10,000
clsrecordinfo.strorderlist = [id] asc
clsrecordinfo.strprimarykey = [id]
clsrecordinfo.intpagesize = 20
clsrecordinfo.intpagenow = intpagenow
clsrecordinfo.strcookiesname = จำนวนบันทึก
clsrecordinfo.strpagevar = หน้า
clsrecordinfo.intrefresh = 0
clsrecordinfo.objconn = เชื่อมต่อ
clsrecordinfo.initclass
arrrecordinfo = clsrecordinfo.arrrecordinfo
strpageinfo = clsrecordinfo.strpageinfo
setclsrecordinfo=ไม่มีอะไร
ฉ__ปิดคอน
-
<html>
<หัว>
<meta http-equiv=เนื้อหาประเภทเนื้อหา=ข้อความ/html; charset=gb2312>
<title>การทดสอบการแบ่งหน้า</title>
<ประเภทสไตล์=ข้อความ/css>
-
.เพจวิว {
ขนาดตัวอักษร: 12px;
-
.pageview td {
เส้นขอบขวาสไตล์: ทึบ;
สไตล์ขอบด้านล่าง: ทึบ;
ขอบขวาสี: #e0e0e0;
ขอบล่างสี: #e0e0e0;
เส้นขอบ-ขวา-ความกว้าง: 1px;
เส้นขอบด้านล่างกว้าง: 1px;
-
.ตารางการดูเพจ {
สไตล์เส้นขอบซ้าย: ทึบ;
สไตล์ขอบด้านบน: ทึบ;
ขอบซ้ายสี: #e0e0e0;
ขอบสีด้านบน: #e0e0e0;
เส้นขอบด้านบนกว้าง: 1px;
เส้นขอบซ้ายกว้าง: 1px;
-
tr.ส่วนหัว {
พื้นหลัง: #eff7ff;
ขนาดตัวอักษร: 14px;
น้ำหนักตัวอักษร: ตัวหนา;
ความสูงของเส้น: 120%;
การจัดแนวข้อความ: กึ่งกลาง;
-
-
</สไตล์>
<ประเภทสไตล์=ข้อความ/css>
-
ร่างกาย {
ขนาดตัวอักษร: 12px;
-
เป็น: ลิงค์ {
สี: #993300;
การตกแต่งข้อความ: ไม่มี;
-
เป็น: เยี่ยมชม {
สี: #003366;
การตกแต่งข้อความ: ไม่มี;
-
เป็น:โฮเวอร์ {
สี: #0066cc;
การตกแต่งข้อความ: ขีดเส้นใต้;
-
เป็น:ใช้งานอยู่ {
สี: #000000;
การตกแต่งข้อความ: ไม่มี;
-
โต๊ะ {
ขนาดตัวอักษร: 12px;
-
-
</สไตล์>
</หัว>
<ร่างกาย>
<ความกว้างของตาราง=เส้นขอบ 100%=0 ระยะห่างระหว่างเซลล์=0 ช่องว่างภายใน=4>
<tr>
<td> <%= strpageinfo%></td>
</tr>
</ตาราง>
<คลาส div=เพจวิว>
<ความกว้างของตาราง=เส้นขอบ 100%=0 ระยะห่างระหว่างเซลล์=0 ช่องว่างภายใน=4>
<tr class=ส่วนหัว>
<td>รหัส</td>
<td>คำอธิบาย</td>
<td>วันที่</td>
</tr>
-
ถ้า isarray (arrrecordinfo) แล้ว
สำหรับ i = 0 ถึง ubound (arrrecordinfo, 2)
-
<tr>
<td> <%= arrrecordinfo(0, i)%></td>
<td> <%= arrrecordinfo(1, i)%></td>
<td> <%= arrrecordinfo(2, i)%></td>
</tr>
-
ต่อไป
สิ้นสุดถ้า
-
</ตาราง>
</div>
<ความกว้างของตาราง=เส้นขอบ 100%=0 ระยะห่างระหว่างเซลล์=0 ช่องว่างภายใน=4>
<tr>
<td> <%= strpageinfo%></td>
</tr>
</ตาราง>
<ความกว้างของตาราง=เส้นขอบ 100%=0 ระยะห่างระหว่างเซลล์=0 ช่องว่างภายใน=4>
<tr>
<td align=center> <%= รับเวลาโอเวอร์(1)%></td>
</tr>
</ตาราง>
</ร่างกาย>
</html>