Ide utamanya: Gunakan satu pernyataan untuk menghitung jumlah record (tanpa mendapatkan atribut recordcount selama kueri), menyimpannya dalam cache di cookie, dan tidak perlu menghitung lagi saat melompat. Gunakan atribut absolutepage dari ado untuk melompat ke halaman. Untuk kenyamanan Dipanggil dan ditulis sebagai sebuah kelas, bagian utama dari kode telah dijelaskan
Lingkungan perangkat keras: amd athlon xp 2600+, 256 ddr
Lingkungan perangkat lunak: server lanjutan ms windows 2000 + iis 5.0 + akses 2000 + ie 6.0
Hasil pengujian: Waktu pengoperasian awal adalah 250 (halaman beranda) - 400 (halaman terakhir) milidetik, (setelah nomor catatan di-cache) lompatan antar halaman stabil kurang dari 47 milidetik halaman tidak memakan waktu lebih dari 350 milidetik.
Cakupan aplikasi: digunakan untuk paging biasa. Tidak cocok untuk kueri yang lebih kompleks: jika kondisinya [judul] seperti %favorit%, waktu kueri akan sangat meningkat, bahkan jika bidang judul diindeks, itu akan sia-sia. (
<%@bahasa = halaman kode vbscript=936%>
<%opsi eksplisit%>
<%
redupkan intdatestart
tanggal mulai = pengatur waktu()
rem ## Buka koneksi basis data
rem ################################################## # ###############
fungsi f__openconn()
jalur strdb redup
konstr redup
strdbpath = ../db/test.mdb
connstr = penyedia=microsoft.jet.oledb.4.0;sumber data=
koneksi = koneksi & server.mappath(strdbpath)
setel koneksi = server.buat objek(adodb.koneksi)
koneksi.buka koneksi
fungsi akhir
rem ################################################## # ###############
rem ## Tutup koneksi basis data
rem ################################################## # ###############
fungsi f__closeconn()
jika isobject(sambungan) maka
samb.tutup
berakhir jika
setel sambungan = tidak ada
fungsi akhir
rem ################################################## # ###############
rem mendapat waktu eksekusi
rem ################################################## # ###############
fungsi gettimeover(iflag)
waktu redup
jika iflag = 1 maka
ttimeover = formatnumber(timer() - intdatestart, 6, benar)
gettimeover = waktu eksekusi: & ttimeover & detik
kalau tidak
ttimeover = formatnumber((timer() - intdatestart) * 1000, 3, benar)
gettimeover = waktu eksekusi: & ttimeover & milidetik
berakhir jika
fungsi akhir
rem ################################################### # ###############
kelas cls_tampilan halaman
sbooinitstate swasta
nama sstcookies pribadi
sstrpageurl pribadi
sstrpagevar pribadi
namasstrtable pribadi
daftar sstrfield pribadi
kondisi pribadi
daftar sstroder pribadi
sstrprimarykey pribadi
sintrefresh pribadi
jumlah sintrecord pribadi
ukuran sintpage pribadi
sintpage pribadi sekarang
sintpagemax pribadi
sobjconn pribadi
sstrpageinfo pribadi
sub kelas pribadi_inisialisasi
panggil clearvars()
sub akhir
sub kelas_terminate() pribadi
setel sobjconn = tidak ada
sub akhir
sub clearvar publik()
sbooinitstate = salah
sstcookiesname=
sstrpageurl=
sstrpagevar = halaman
sstrtablename=
sstrfieldslist =
kondisi str =
daftar strorder =
sstrkunci utama=
sintrefresh=0
jumlah rekaman sintre = 0
ukuran halaman sint=0
halaman sint sekarang=0
sintpagemax=0
sub akhir
rem ## Variabel cookie yang menyimpan jumlah record
properti publik biarkan strcookiesname(nilai)
sstrcookiesname = nilai
properti akhir
rem ## alamat pengalihan
properti publik biarkan strpageurl(nilai)
sstrpageurl = nilai
properti akhir
rem ## nama tabel
properti publik biarkan strtablename(nilai)
sstrtablename = nilai
properti akhir
rem ## daftar bidang
properti publik biarkan strfieldslist(nilai)
sstrfieldslist = nilai
properti akhir
rem ## Kondisi kueri
properti publik biarkan strcondiction(nilai)
jika nilai <> maka
kondisi sstr = di mana & nilai
kalau tidak
kondisi str =
berakhir jika
properti akhir
rem ## Bidang penyortiran, seperti: [id] asc, [createdatetime] desc
properti publik biarkan strorderlist (nilai)
jika nilai <> maka
sstroorderlist = pesan berdasarkan & nilai
kalau tidak
daftar strorder =
berakhir jika
properti akhir
rem ## Bidang yang digunakan untuk menghitung jumlah record
properti publik biarkan strprimarykey(nilai)
sstrprimarykey = nilai
properti akhir
rem ## Jumlah record yang ditampilkan pada setiap halaman
properti publik biarkan intpagesize(nilai)
sintpagesize = tonum(nilai, 20)
properti akhir
rem ## Objek koneksi database
properti publik biarkan objconn(nilai)
atur sobjconn = nilai
properti akhir
rem ## halaman saat ini
properti publik biarkan intpagenow(nilai)
sintpagenow = tonum(nilai, 1)
properti akhir
rem ## parameter halaman
properti publik biarkan strpagevar(nilai)
sstrpagevar = nilai
properti akhir
rem ## Apakah akan menyegarkan. 1 berarti menyegarkan, nilai lain tidak menyegarkan
properti publik biarkan intrefresh (nilai)
sintrefresh = tonum(nilai, 0)
properti akhir
rem ## Dapatkan halaman saat ini
properti publik dapatkan intpagenow()
intpagenow = singpagenow
properti akhir
rem ## Informasi paginasi
properti publik dapatkan strpageinfo()
strpageinfo = sstrpageinfo
properti akhir
rem ## Dapatkan kumpulan rekaman, array atau string dua dimensi, Anda harus menggunakan isarray() untuk menilai saat melakukan keluaran loop
properti publik dapatkan arrrecordinfo()
jika tidak sbooinitstate maka
properti keluar
berakhir jika
redup, sql
sql = pilih & sstrfieldslist & _
dari & sstrtablename & _
kondisi&_
daftar sstroder
set rs = server.createobject(adodb.recordset)
rs.open sql, sobjconn, 1, 1
jika tidak (rs.eof atau rs.bof) maka
rs.pagesize = sintpagesize
rs.absolutepage = sintpagenow
jika tidak (rs.eof atau rs.bof) maka
arrrecordinfo = rs.getrows(sintpagesize)
kalau tidak
arrrecordinfo=
berakhir jika
kalau tidak
arrrecordinfo=
berakhir jika
rs.tutup
setr=tidak ada
properti akhir
rem ## Inisialisasi jumlah record
sub inirecordcount() pribadi
jumlah rekaman sintre = 0
jika tidak (sbooinitstate) maka keluar dari sub
redup sinttmp
sinttmp = tonum(permintaan.cookies(_xp_ & namasstrcookies), -1)
jika ((sinttmp < 0) atau (sintrefresh = 1))maka
redupkan sql, rs
sql = pilih hitungan( & sstrprimarykey & ) & _
dari & sstrtablename & _
kondisi yang kuat
setel rs = sobjconn.execute(sql)
jika rs.eof atau rs.bof maka
sinttmp = 0
kalau tidak
sinttmp = rs(0)
berakhir jika
sintrecordcount = sinttmp
respon.cookies(_xp_ & sstrcookiesname) = sinttmp
kalau tidak
sintrecordcount = sinttmp
berakhir jika
sub akhir
rem ## Inisialisasi informasi paging
sub initpageinfo pribadi()
sstrpageinfo=
jika tidak (sbooinitstate) maka keluar dari sub
permukaan redup
surl = sstrpageurl
jika instr(1, surl, ?, 1) > 0 maka
surl = surl & & & sstrpagevar & =
kalau tidak
surl = surl & ?
berakhir jika
jika sintpagenow <= 0 maka sintpagenow = 1
jika sintrecordcount mod sintpagesize = 0 maka
sintpagemax = sintrecordcount\sintpagesize
kalau tidak
sintpagemax = sintrecordcount \ sintpagesize + 1
berakhir jika
jika sintpagenow > sintpagemax maka sintpagenow = sintpagemax
jika sintpagenow <= 1 maka
sstrpageinfo = Halaman beranda halaman sebelumnya
kalau tidak
sstrpageinfo = sstrpageinfo & <a href= & surl & 1>Beranda</a>
sstrpageinfo = sstrpageinfo & <a href= & surl & (sintpagenow - 1) & >Halaman sebelumnya</a>
berakhir jika
jika sintpagemax - sintpagenow < 1 maka
sstrpageinfo = sstrpageinfo & halaman berikutnya halaman terakhir
kalau tidak
sstrpageinfo = sstrpageinfo & <a href= & surl & (sintpagenow + 1) & >halaman berikutnya</a>
sstrpageinfo = sstrpageinfo & <a href= & surl & sintpagemax & >halaman terakhir</a>
berakhir jika
sstrpageinfo = sstrpageinfo & halaman: <strong><font color=#990000> & sintpagenow & </font> / & sintpagemax & </strong>
sstrpageinfo = sstrpageinfo & total<strong> & sintrecordcount & </strong> catatan<strong> & sintpagesize & </strong> catatan/halaman
sub akhir
rem ## konversi bilangan bulat panjang
tonum fungsi pribadi (s, default)
s = s &
jika s <> dan isnumerik maka
nada = clng(s)
kalau tidak
nada=standar
berakhir jika
fungsi akhir
rem ## Inisialisasi kelas
sub kelas init publik()
sbooinitstate = benar
jika tidak(isobject(sobjconn)) maka sbooinitstate = false
panggil initrecordcount()
panggil initpageinfo()
sub akhir
kelas akhir
strlocalurl redup
strlocalurl = permintaan.variabel server(nama_skrip)
redupkan halaman sekarang
intpagenow = permintaan.querystring(halaman)
redupkan intpagesize, strpageinfo
ukuran halaman int=30
info catatan redup, i
koneksi redup
f__openconn
dimclsrecordinfo
atur clsrecordinfo = cls_pageview baru
clsrecordinfo.strtablename = [tabel saya]
clsrecordinfo.strpageurl = strlocalurl
clsrecordinfo.strfieldslist = [id], [judul], [terakhir kali]
clsrecordinfo.strcondiction = [id] < 10000
clsrecordinfo.stroderlist = [id] asc
clsrecordinfo.strprimarykey = [id]
clsrecordinfo.intpagesize = 20
clsrecordinfo.intpagenow = intpagenow
clsrecordinfo.strcookiesname = jumlah catatan
clsrecordinfo.strpagevar = halaman
clsrecordinfo.intrefresh = 0
clsrecordinfo.objconn = samb
clsrecordinfo.initclass
arrrecordinfo = clsrecordinfo.arrrecordinfo
strpageinfo = clsrecordinfo.strpageinfo
setclsrecordinfo=tidak ada
f__closeconn
%>
<html>
<kepala>
<meta http-equiv=tipe konten konten=teks/html; charset=gb2312>
<title>Uji halaman</title>
<tipe gaya=teks/css>
<!--
.tampilan halaman {
ukuran font: 12 piksel;
}
.tampilan halaman td {
gaya batas kanan: padat;
gaya batas bawah: padat;
warna-batas-kanan: #e0e0e0;
warna batas bawah: #e0e0e0;
lebar tepi kanan: 1 piksel;
lebar batas bawah: 1 piksel;
}
.tabel tampilan halaman {
gaya batas kiri: padat;
gaya tepi atas: padat;
batas-kiri-warna: #e0e0e0;
warna-batas-atas: #e0e0e0;
lebar batas atas: 1 piksel;
lebar tepi kiri: 1 piksel;
}
tr.header {
latar belakang: #eff7ff;
ukuran font: 14px;
berat font: tebal;
tinggi garis: 120%;
perataan teks: tengah;
}
-->
</gaya>
<tipe gaya=teks/css>
<!--
tubuh {
ukuran font: 12 piksel;
}
a: tautan {
warna: #993300;
dekorasi teks: tidak ada;
}
a: mengunjungi {
warna: #003366;
dekorasi teks: tidak ada;
}
a: arahkan kursor {
warna: #0066cc;
dekorasi teks: garis bawah;
}
a: aktif {
warna: #000000;
dekorasi teks: tidak ada;
}
meja {
ukuran font: 12px;
}
-->
</gaya>
</kepala>
<tubuh>
<lebar tabel=100% batas=0 spasi sel=0 bantalan sel=4>
<tr>
<td> <%= strpageinfo%></td>
</tr>
</tabel>
<div class=tayangan halaman>
<lebar tabel=100% batas=0 spasi sel=0 bantalan sel=4>
<tr kelas=tajuk>
<td>id</td>
<td>Deskripsi</td>
<td>Tanggal</td>
</tr>
<%
jika isarray(arrrecordinfo) lalu
untuk i = 0 hingga ubound(arrrecordinfo, 2)
%>
<tr>
<td> <%= arrrecordinfo(0, i)%></td>
<td> <%= arrrecordinfo(1, i)%></td>
<td> <%= arrrecordinfo(2, i)%></td>
</tr>
<%
Berikutnya
berakhir jika
%>
</tabel>
</div>
<lebar tabel=100% batas=0 spasi sel=0 bantalan sel=4>
<tr>
<td> <%= strpageinfo%></td>
</tr>
</tabel>
<lebar tabel=100% batas=0 spasi sel=0 bantalan sel=4>
<tr>
<td align=center> <%= gettimeover(1)%></td>
</tr>
</tabel>
</tubuh>
</html>