Tujuan artikel ini adalah untuk mewujudkan penelusuran halaman data besar dan mengoptimalkan kecepatan.
Untuk membangun aplikasi web, fungsi penelusuran paging sangat penting; masalah ini juga telah menjadi masalah paling umum sejak lama, dan telah diselesaikan dengan baik. Diantaranya, ada banyak algoritma paging untuk program ASP, seperti menggunakan Atribut PageSize dari objek ado. Hitung halaman berdasarkan jumlah total catatan, lalu lompat ke kumpulan catatan dan kemudian keluaran; ada juga cara untuk menulis prosedur tersimpan untuk mengimplementasikan data paging. Masing-masing aspek ini memiliki kelebihan dan kekurangannya sendiri Di bawah ini saya akan memperkenalkan algoritma paging yang sangat cepat dalam proyek aktual.
Poin-poin penting: SQL (Diimplementasikan menggunakan TOP dan penomoran otomatis)
skrip halaman (fungsi fallback browser)
:
IIS/SQL Server/Akses
Struktur tabel:
membuat tabel isi tabel(
Nomor otomatis IDENTITY(int, 1,1) bukan null,
Kode klasifikasi<I>var</I>char(20) null,
Judul<I>var</I>char(255) NULL,
Konten<I>var</I>char(4000) nol,
waktu tanggal waktu nol,
)
Prinsip pelaksanaan:
Tabel ini diatur dengan field penomoran otomatis. Karakteristik dari field ini adalah untuk menghasilkan pembentukan non-duplikat, termasuk bahwa field tersebut akan tetap 'fluid' setelah menghapus record (Catatan: Biasanya dalam pembuatan tabel sistem, ini bidang ini jarang digunakan. , karena nomor tidak dapat dikelola secara bebas, tetapi digunakan di sini terutama karena saya ingin menghilangkan kode pemeliharaan nomor di artikel).
Paginasi:
Kemudian langkah pertama adalah menanyakan data suatu halaman; jika ada 100 record dan 20 record digunakan untuk satu halaman, maka algoritma paging yang biasa adalah "Jumlah total halaman = total record dibagi dengan jumlah kontrol paging [Jika ada sisa, jumlah total halaman ditambah satu ]", pendekatan ini mengarah pada kebutuhan untuk menghasilkan kumpulan catatan besar dari semua catatan; oleh karena itu, beberapa orang telah mengusulkan penggunaan algoritma paging dari prosedur tersimpan. Yang pertama adalah asp skrip untuk menghasilkan kumpulan rekaman besar, yang cukup lambat, dan yang terakhir membunuh ayam. Meskipun saya sering menulis prosedur tersimpan, menurut pemikiran saya, saya menemukan bahwa menulis prosedur tersimpan benar-benar mubazir.
Dalam SQL, banyak teman yang baru mengenalnya mengetahui peran kata kunci Top yang dimodifikasi; misalnya: pilih TOP 1 * dari tabel1 -- Dengan cara ini, kumpulan catatan dengan hanya satu catatan dikembalikan dari tabel Table1 tujuan optimasi paging adalah untuk menghindari Menghasilkan kumpulan catatan yang terlalu besar dapat dikontrol sepenuhnya melalui TOP; sekarang tabel kueri harus memilih 20 penomoran otomatis, judul, konten, dan waktu dari tabel konten.
Namun saat ini masih ada kendala yaitu bagaimana memposisikannya. Top tidak mungkin secara otomatis memposisikan dan menampilkan halaman tertentu untuk kita. Di sinilah klausa dirancang untuk menampilkan konten yang benar sesuai dengan kondisi tertentu; catatan: urutan berdasarkan pengurutan catatan sangat penting, ini menentukan keberhasilan atau kegagalan algoritma ini;
Demonstrasi di sini adalah metode DESC yang disusun dalam urutan terbalik. Misalnya untuk update software pada suatu website, update terbaru ditempatkan terlebih dahulu, dan ini adalah metode urutan terbalik.
Oke, mari kita lihat kode sebenarnya. Pertama, kita harus menentukan apakah itu halaman awal.
redupkan strSQL,i,endID,isBeginPage
const Cnt_PageSize = 20 'Tentukan ukuran setiap halaman catatan
'Tentukan apakah ini merupakan operasi untuk masuk ke halaman berikutnya dengan memeriksa nilai parameter Halaman yang diteruskan oleh browser
isBeginPage = isEmpty(request("Page")) atau request("Page")="" atau request("Page")<>"next"
'Inilah inti dari paging
jika isBeginPage maka 'Jika itu adalah halaman awal
'Query = Cantumkan record yang kode klasifikasinya sama dengan parameter flbm, dalam urutan terbalik, dan hanya cantumkan pena Cnt_PageSize pertama (Cnt_PageSize adalah definisi konstan, misalnya 20)
strSQL = "pilih TOP " & Cnt_pageSize & " penomoran otomatis, judul, konten, waktu dari tabel konten di mana pengkodean klasifikasi = '" & TRIM(SQLEncode(request("flbm"))) & "' urutan berdasarkan desc penomoran otomatis"
else 'jika bukan halaman awal
if request("Page")="next" maka 'Ini ditulis di sini untuk meningkatkan kinerja kode. Jika parameternya berikutnya, artinya mengambil konten halaman
'Query = Cantumkan record yang kode klasifikasinya sama dengan parameter flbm dan harus lebih kecil dari nomor otomatis endID (endID juga merupakan parameter), dan urutkan dalam urutan terbalik, dan hanya cantumkan pena Cnt_PageSize pertama (Cnt_PageSize adalah a definisi konstan, seperti 20)
strSQL = "pilih TOP " & Cnt_pageSize & " penomoran otomatis, judul, konten, waktu dari tabel konten di mana pengkodean klasifikasi = '" & TRIM(SQLEncode(request("flbm"))) & "' dan penomoran otomatis<" & permintaan ("endID") & " pesan berdasarkan nomor otomatis desc"
Berakhir jika
end if
'Buka koneksi data untuk menjalankan SQL dan membuat kumpulan data
atur rs = Cnn.Eksekusi(strSQL)
jika bukan rs.Eof maka 'Tulis di sini untuk menentukan apakah itu Eof. Tidak perlu, tetapi ada arti khusus di sini.
call TableTitle 'Ini adalah fungsi yang ditulis sendiri yang digunakan untuk membuat tag tabel
panggil BeginTr 'Ini adalah tanda tr untuk membuat tabel
untuk i=0 hingga rs.fields.Count-1 'Melintasi bidang kumpulan data
panggil AddCol(rs(i).name) 'Nama bidang keluaran
Berikutnya
panggil endTr
while not rs.eof 'Ulangi isi kumpulan catatan dan keluaran
panggil BeginTr
untuk i=0 ke rs.fields.Count-1
panggil AddRow(ASPEncode(rs(i).value))
Berikutnya
panggilan akhirTr
endID = rs("penomoran otomatis") 'Di sini menyimpan nilai penomoran otomatis setiap keluaran
rs.MoveNext
Pergi ke
call TableBottom 'Sejauh ini, cukup keluarkan semua konten kumpulan data
'Tanda pembalikan halaman ditampilkan di sini, vbaIIF adalah fungsi yang ditulis sendiri
Prototipenya adalah <I>fungsi</I> vbaIIF(a,b,c)
jika kemudian
vbaIIF=b
kalau tidak
vbaIIF =c
berakhir jika
akhir <I>fungsi</I>
Implementasi halaman sebelumnya dicapai dengan memanggil fungsi browser history.back(1) melalui skrip Maka tidak perlu membuat ulang data di sisi server saat kembali ke halaman, dan kecepatan tidak perlu dipertimbangkan. .
Saat berada di halaman beranda, link ke halaman sebelumnya seharusnya tidak valid. Hal ini dicapai melalui vbaIIF(isBeginPage, "disabled", ""). Jika ini adalah halaman beranda, tambahkan atribut nonaktif ke tag bukan halaman beranda, tambahkan history.back (1); Perintah skrip, digunakan untuk memutar kembali halaman penelusuran.
Halaman berikutnya adalah meneruskan parameter Halaman dan parameter endID. Halaman disetel ke berikutnya untuk menunjukkan tindakan halaman berikutnya. endID menunjukkan nomor akhir kumpulan catatan saat ini, dan halaman berikutnya akan diberi nomor halaman dari ini.
respon.Write("〈a href=""#"" onclick=""java<I>script</I>:" & vbaIIF(isBeginPage,"","history.back(1);") & "" " " & vbaIIF(isBeginPage," dinonaktifkan ","") & "〉Halaman sebelumnya〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=next&endID = " & endID & """〉Halaman selanjutnya〈/a〉")
kalau tidak
'Di sini, dengan menilai apakah kumpulan catatan itu kosong, kita dapat memecahkan masalah terus membalik halaman hingga halaman terakhir.
jika bukan isBeginPage maka
'Tentukan apakah itu catatan kosong dan bukan halaman awal, lalu buat skrip untuk halaman rollback. Efeknya setelah masuk ke halaman tersebut, otomatis kembali ke halaman sebelumnya.
respon.Tulis "〈<I>skrip</I> bahasa=java<I>skrip</I>〉" & vbCrlf
Respon.Tulis "history.back(1);" & vbCrlf
Respon.Tulis "〈/<I>skrip</I>〉"
Respon.Akhir
lain 'Jika ini adalah catatan halaman awal, itu akan kosong, dan akan muncul pesan bahwa tidak ada konten.
Response.Tulis "〈warna font=biru〉Tidak ada konten dalam kategori ini〈/font〉"
berakhir jika
akhirJika
Ringkasan: Melalui skrip front-end dan keterampilan kueri SQL, program paging berkinerja tinggi menjadi sederhana dan cepat.
Saya berharap rekan-rekan dapat menghasilkan algoritma paging data real-time yang lebih baik.
Catatan: Karena forum membatasi karakter HTML, simbol kunci ada di dalamnya Huruf kapital Cina.