Le but de cet article est de réaliser une navigation paginée du big data et d’en optimiser la vitesse.
Pour créer une application Web, la fonction de navigation par pagination est essentielle ; ce problème est également le problème le plus courant depuis longtemps, et il a été bien résolu, il existe de nombreux algorithmes de pagination pour les programmes ASP, comme l'utilisation du. Attributs PageSize de l'objet ado. Calculez les pages en fonction du nombre total d'enregistrements, puis passez à l'ensemble d'enregistrements, puis affichez. Il existe également des moyens d'écrire des procédures stockées pour implémenter les données de pagination. Chacun de ces aspects a ses propres avantages et inconvénients. . Ci-dessous, je présenterai un algorithme de pagination très rapide dans les projets réels
: SQL (implémenté à l'aide de TOP et de la numérotation automatique) ;
de script de page (fonction de secours du navigateur)
:
IIS/SQL Serveur/Accès
Structure du tableau :
créer une table de contenu de table (
Numéro automatique IDENTITY(int, 1,1) non nul,
Code de classification<I>var</I>char(20) nul,
Titre<I>var</I>char(255) NULL,
Contenu<I>var</I>char(4000) nul,
heure dateheure nulle,
)
Principe de mise en œuvre :
Cette table est configurée avec un champ de numérotation automatique. La caractéristique de ce champ est de générer une mise en forme non dupliquée, notamment le fait que le champ restera toujours « fluide » après la suppression de l'enregistrement (Remarque : généralement dans la construction des tables système, cela est rarement utilisé, car le numéro ne peut pas être géré librement, mais il est utilisé ici principalement parce que je souhaite omettre le code pour la gestion du numéro dans l'article).
Pagination:
Ensuite, la première étape consiste à interroger les données d'une page ; s'il y a 100 enregistrements et que 20 enregistrements sont utilisés pour une page, alors l'algorithme de pagination habituel est "Nombre total de pages = nombre total d'enregistrements divisé par le nombre de contrôle de pagination [Si il y a un reste, le nombre total de pages plus un ]", cette approche conduit à la nécessité de générer un grand ensemble d'enregistrements de tous les enregistrements ; par conséquent, certaines personnes ont proposé d'utiliser l'algorithme de pagination des procédures stockées. Le premier est un asp script pour générer un grand jeu d'enregistrements, ce qui est assez lent, et ce dernier tue des poulets. Bien que j'écrive souvent des procédures stockées, selon ma pensée, je trouve que l'écriture de procédures stockées est complètement redondante.
En SQL, de nombreux amis qui débutent connaissent le rôle du mot-clé Top modifié ; par exemple : select TOP 1 * from table1 -- De cette façon, un ensemble d'enregistrements avec un seul enregistrement est renvoyé de la table Table1. L'objectif de l'optimisation de la pagination est d'éviter que la génération d'un ensemble d'enregistrements trop volumineux puisse être entièrement contrôlée via TOP ; la table de requête doit désormais sélectionner la numérotation automatique, le titre, le contenu et l'heure du Top 20 dans la table de contenu.
Mais maintenant, il y a toujours un problème, c'est-à-dire comment le positionner. Il est impossible pour Top de positionner et d'afficher automatiquement une certaine page pour nous. C'est là que la clause est conçue pour afficher le contenu correct selon une condition spécifique ; remarque : l'ordre par tri des enregistrements est très important, cela détermine le succès ou l'échec de cet algorithme ;
La démonstration ici est la méthode DESC, qui est organisée dans l'ordre inverse. Par exemple, pour les mises à jour de logiciels sur un site Web, la mise à jour la plus récente est placée en premier, et c'est la méthode de l'ordre inverse.
OK, jetons un coup d'œil au code réel. Tout d'abord, nous devons déterminer s'il s'agit de la page de démarrage.
faible strSQL,i,endID,isBeginPage
const Cnt_PageSize = 20 'Définir la taille de chaque page d'enregistrements
'Déterminez s'il s'agit d'une opération pour accéder à la page suivante en vérifiant la valeur du paramètre Page transmis par le navigateur
isBeginPage = isEmpty(request("Page")) ou request("Page")="" ou request("Page")<>"next"
'Voici le cœur de la pagination
if isBeginPage then 'Si c'est la page de démarrage
'Requête = Lister les enregistrements dont le code de classification est égal au paramètre flbm, dans l'ordre inverse, et lister uniquement le premier stylo Cnt_PageSize (Cnt_PageSize est une définition constante, telle que 20)
strSQL = "select TOP " & Cnt_pageSize & " numérotation automatique, titre, contenu, heure à partir de la table de contenu où encodage de classification = '" & TRIM(SQLEncode(request("flbm"))) & "' ordre par numérotation automatique desc"
else 'sinon la page de démarrage
if request("Page")="next" then 'Ceci est écrit ici pour améliorer les performances du code. Si le paramètre est next, cela signifie prendre le contenu de la page.
'Requête = Liste les enregistrements dont le code de classification est égal au paramètre flbm et doit être inférieur au numéro automatique endID (endID est également un paramètre), et les trie dans l'ordre inverse, et ne liste que le premier stylo Cnt_PageSize (Cnt_PageSize est un définition constante, telle que 20)
strSQL = "select TOP " & Cnt_pageSize & " numérotation automatique, titre, contenu, heure de la table de contenu où encodage de classification = '" & TRIM(SQLEncode(request("flbm"))) & "' et numérotation automatique<" & request (« endID ») et « ordre par description automatique du numéro »
Terminer si
end if
'Ouvrez la connexion de données pour exécuter SQL et créer un jeu d'enregistrements
définir rs = Cnn.Execute(strSQL)
sinon rs.Eof alors 'Écrivez ici pour déterminer s'il s'agit d'Eof. Ce n'est pas nécessaire, mais cela a ici sa signification particulière.
call TableTitle 'Voici une fonction auto-écrite utilisée pour créer des balises de table
appelez beginTr 'Voici la marque tr pour créer la table
pour i=0 à rs.fields.Count-1 'Parcourez les champs du jeu d'enregistrements
call AddCol(rs(i).name) 'Nom du champ de sortie
Suivant
appelez endTr
sans rs.eof 'Bouclez le contenu de l'ensemble d'enregistrements et affichez la sortie
appelez beginTr
pour i=0 à rs.fields.Count-1
appelez AddRow(ASPEncode(rs(i).value))
Suivant
appeler finTr
endID = rs("numérotation automatique") 'Enregistre ici la valeur de numérotation automatique de chaque sortie
rs.MoveNext
Wende
call TableBottom 'Jusqu'à présent, affichez simplement tout le contenu du jeu d'enregistrements
'La marque de changement de page est affichée ici, vbaIIF est une fonction auto-écrite
Le prototype est la <I>fonction</I> vbaIIF(a,b,c)
si un alors
vbaIIF=b
autre
vbaIIF =c
finir si
fin de la <I>fonction</I>
L'implémentation de la page précédente est réalisée en appelant la fonction du navigateur history.back(1) via un script. Il n'est alors pas nécessaire de régénérer les données côté serveur lors du retour à la page, et la vitesse n'a pas besoin d'être prise en compte. .
Sur la page d'accueil, le lien vers la page précédente doit être invalide. Ceci est réalisé via vbaIIF(isBeginPage, "disabled", "") S'il s'agit de la page d'accueil, ajoutez l'attribut désactivé à la balise. pas la page d'accueil, ajoutez la commande history.back (1); utilisée pour restaurer la page de navigation.
La page suivante doit transmettre le paramètre Page et le paramètre endID est défini sur next pour indiquer l'action de la page suivante. endID indique le numéro de fin de l'ensemble d'enregistrements actuel, et la page suivante sera paginée à partir de celui-ci.
réponse.Write("〈a href=""#"" onclick=""java<I>script</I>:" & vbaIIF(isBeginPage,"","history.back(1);") & "" " " & vbaIIF(isBeginPage," désactivé ","") & "〉Page précédente〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=next&endID = " & endID & """〉Page suivante〈/a〉")
autre
« Ici, en jugeant si le jeu d'enregistrements est vide, nous pouvons résoudre le problème de continuer à tourner les pages jusqu'à la dernière page.
sinon isBeginPage alors
'Déterminez s'il s'agit d'un enregistrement vide et s'il ne s'agit pas de la page de démarrage, puis générez un script pour la page de restauration. L'effet est qu'après avoir entré la page, elle reviendra automatiquement à la page précédente.
réponse.Écrivez "〈<I>script</I> langage=java<I>script</I>〉" & vbCrlf
Réponse.Écrivez "history.back(1);"
Réponse.Écrivez "〈/<I>script</I>〉"
Réponse.Fin
else 'S'il s'agit de l'enregistrement de la page de démarrage, il sera vide et il indiquera qu'il n'y a pas de contenu.
Response.Write "〈font color=blue〉Il n'y a pas de contenu dans cette catégorie〈/font〉"
finir si
finSi
Résumé : grâce aux scripts frontaux et aux compétences en matière de requêtes SQL, les programmes de pagination hautes performances sont simples et rapides.
J'espère que les pairs pourront proposer de meilleurs algorithmes de pagination de données en temps réel.
Remarque : étant donné que le forum limite les caractères HTML, les symboles clés sont présents. Lettres majuscules chinoises.