Der Zweck dieses Artikels besteht darin, das seitige Durchsuchen großer Datenmengen zu realisieren und die Geschwindigkeit zu optimieren.
Um eine Webanwendung zu erstellen, ist die Paging-Browsing-Funktion seit langem das häufigste Problem und wurde gut gelöst. Darunter gibt es viele Paging-Algorithmen für ASP-Programme, z PageSize-Attribute des Ado-Objekts berechnen, dann zum Datensatzsatz springen und dann ausgeben. Es gibt auch Möglichkeiten, gespeicherte Prozeduren zu schreiben, um Paging-Daten zu implementieren Im Folgenden werde ich einen Paging-Algorithmus vorstellen, der in tatsächlichen Projekten sehr schnell ist
: SQL (Implementiert mit TOP und automatischer Nummerierung).
des Seitenskripts (Browser-Fallback-Funktion)
:
IIS/SQL Server/Access
Tabellenstruktur:
Tabelleninhaltstabelle erstellen(
Automatische Zahl IDENTITY(int, 1,1) nicht null,
Klassifizierungscode<I>var</I>char(20) null,
Title<I>var</I>char(255) NULL,
Inhalt<I>var</I>char(4000) null,
Uhrzeit, Datum und Uhrzeit null,
)
Umsetzungsprinzip:
Diese Tabelle ist mit einem automatischen Nummerierungsfeld ausgestattet. Die Eigenschaft dieses Felds besteht darin, eine nicht-duplizierte Formgebung zu erzeugen, einschließlich der Tatsache, dass das Feld nach dem Löschen des Datensatzes weiterhin „flüssig“ bleibt (Hinweis: Normalerweise ist dies bei der Erstellung von Systemtabellen der Fall Feld wird selten verwendet, da die Nummer nicht frei verwaltet werden kann, aber es wird hier hauptsächlich verwendet, weil ich den Code für die Nummernpflege im Artikel weglassen möchte.
Pagination:
Dann besteht der erste Schritt darin, die Daten einer Seite abzufragen. Wenn 100 Datensätze vorhanden sind und 20 Datensätze für eine Seite verwendet werden, lautet der übliche Paging-Algorithmus „Gesamtzahl der Seiten = Gesamtzahl der Datensätze dividiert durch die Kontrollanzahl des Pagings [If Es bleibt ein Rest, die Gesamtzahl der Seiten plus eins]“, dieser Ansatz führt dazu, dass ein großer Datensatz aller Datensätze generiert werden muss. Daher haben einige Leute vorgeschlagen, den Paging-Algorithmus gespeicherter Prozeduren zu verwenden. Ersteres ist ein ASP Skript, um einen großen Datensatz zu generieren, was ziemlich langsam ist, und obwohl ich oft gespeicherte Prozeduren schreibe, finde ich, dass das Schreiben gespeicherter Prozeduren völlig überflüssig ist.
In SQL kennen viele Freunde die Rolle des Top-modifizierten Schlüsselworts: select TOP 1 * from table1 – Auf diese Weise wird ein Datensatz mit nur einem Datensatz aus der Tabelle Table1 zurückgegeben Das Ziel der Paging-Optimierung besteht darin, die Generierung eines übermäßig großen Datensatzes zu vermeiden. Jetzt kann die Abfragetabelle die automatische Nummerierung, den Titel, den Inhalt und die Zeit der Top 20 aus der Inhaltstabelle auswählen.
Aber jetzt gibt es noch ein Problem, nämlich wie man es positioniert. Es ist für Top unmöglich, eine bestimmte Seite automatisch für uns zu positionieren und auszugeben. Hier ist die Klausel so konzipiert, dass sie den richtigen Inhalt gemäß einer bestimmten Bedingung ausgibt. Hinweis: Die Sortierreihenfolge der Datensätze ist sehr wichtig, sie bestimmt den Erfolg oder Misserfolg dieses Algorithmus.
Die Demonstration hier ist die DESC-Methode, die in umgekehrter Reihenfolge angeordnet ist. Beispielsweise wird bei Software-Updates auf einer Website das neueste Update zuerst platziert, und dies ist die Methode in umgekehrter Reihenfolge.
OK, schauen wir uns den eigentlichen Code an. Zuerst müssen wir feststellen, ob es sich um die Startseite handelt.
dim strSQL,i,endID,isBeginPage
const Cnt_PageSize = 20 'Definieren Sie die Größe jeder Datensatzseite
„Bestimmen Sie, ob es sich um einen Vorgang zum Aufrufen der nächsten Seite handelt, indem Sie den Wert des vom Browser übergebenen Parameters „Seite“ überprüfen
isBeginPage = isEmpty(request("Page")) or request("Page")="" or request("Page")<>"next"
„Hier liegt der Kern des Pagings.“
if isBeginPage then 'Wenn es die Startseite ist
'Abfrage = Listen Sie die Datensätze auf, deren Klassifizierungscode dem Parameter flbm entspricht, in umgekehrter Reihenfolge, und listen Sie nur den ersten Cnt_PageSize-Stift auf (Cnt_PageSize ist eine konstante Definition, z. B. 20)
strSQL = "select TOP " & Cnt_pageSize & " automatische Nummerierung, Titel, Inhalt, Zeit aus Inhaltstabelle, wobei Klassifizierungskodierung = '" & TRIM(SQLEncode(request("flbm"))) & "' Reihenfolge durch automatische Nummerierung desc"
else 'wenn nicht die Startseite
if request("Page")="next" then 'Dies wird hier geschrieben, um die Leistung des Codes zu verbessern. Wenn der Parameter next ist, bedeutet dies, dass der Inhalt der Seite übernommen wird
'Abfrage = Listen Sie die Datensätze auf, deren Klassifizierungscode dem Parameter flbm entspricht und kleiner als die automatische Nummer endID sein sollte (endID ist auch ein Parameter), und sortieren Sie sie in umgekehrter Reihenfolge und listen Sie nur den ersten Cnt_PageSize-Stift auf (Cnt_PageSize ist ein konstante Definition, z. B. 20)
strSQL = "select TOP " & Cnt_pageSize & " automatische Nummerierung, Titel, Inhalt, Zeit aus der Inhaltstabelle, wobei Klassifizierungskodierung = '" & TRIM(SQLEncode(request("flbm"))) & "' und automatische Nummerierung<" & request ("endID") & "Reihenfolge nach automatischem Nummernabstieg"
Ende wenn
end if
'Öffnen Sie die Datenverbindung, um SQL auszuführen und einen Datensatz zu erstellen
set rs = Cnn.Execute(strSQL)
wenn nicht rs.Eof, dann 'Schreiben Sie hier, um festzustellen, ob es Eof ist. Es ist nicht notwendig, aber es hat hier seine besondere Bedeutung.
call TableTitle 'Hier ist eine selbst geschriebene Funktion, die zum Erstellen von Tabellen-Tags verwendet wird
call beginTr 'Hier ist die tr-Marke zum Erstellen der Tabelle
für i=0 bis rs.fields.Count-1 'Durchlaufen Sie die Recordset-Felder
call AddCol(rs(i).name) 'Name des Ausgabefelds
Nächste
call endTr
while not rs.eof 'Schleifen Sie den Inhalt des Datensatzes und geben Sie ihn aus
Rufen Sie beginTr
für i=0 bis rs.fields.Count-1
auf
call AddRow(ASPEncode(rs(i).value))
Nächste
call endTr
endID = rs("automatic numbering") 'Speichert hier den automatischen Nummerierungswert jeder Ausgabe
rs.MoveNext
Wend
call TableBottom 'Bisher einfach den gesamten Inhalt des Datensatzes ausgeben
'Hier wird die Umblättermarke ausgegeben, vbaIIF ist eine selbstgeschriebene Funktion
Der Prototyp ist <I>function</I> vbaIIF(a,b,c)
wenn ein dann
vbaIIF=b
anders
vbaIIF =c
Ende wenn
<I>Funktion</I> beenden
Die Implementierung der vorherigen Seite wird durch Aufrufen der Browserfunktion „history.back(1)“ über ein Skript erreicht. Beim Zurückkehren zur Seite müssen dann keine Daten auf der Serverseite neu generiert werden, und die Geschwindigkeit muss nicht berücksichtigt werden .
Auf der Startseite sollte der Link zur vorherigen Seite ungültig sein. Dies wird durch vbaIIF(isBeginPage, „disabled“, „“) erreicht nicht die Startseite, fügen Sie „history.back“ (1) hinzu; Skriptbefehl, der zum Zurücksetzen der Browserseite verwendet wird.
Die nächste Seite besteht darin, den Parameter „Page“ zu übergeben, und der Parameter „EndID“ wird auf „Next“ gesetzt, um die Aktion der nächsten Seite anzugeben. „EndID“ gibt die Endnummer des aktuellen Datensatzes an und die nächste Seite wird von dieser Seite aus paginiert.
Response.Write("〈a href=""#"" onclick=""java<I>script</I>:" & vbaIIF(isBeginPage,"","history.back(1);") & "" " " & vbaIIF(isBeginPage," deaktiviert ","") & "〉Vorherige Seite〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=next&endID = " & endID & """〉Nächste Seite〈/a〉")
anders
„Hier können wir durch die Beurteilung, ob der Datensatz leer ist, das Problem des weiteren Umblätterns bis zur letzten Seite lösen.“
Wenn nicht, dann isBeginPage
„Bestimmen Sie, ob es sich um einen leeren Datensatz und nicht um die Startseite handelt, und generieren Sie dann ein Skript für die Rollback-Seite. Der Effekt besteht darin, dass nach dem Aufrufen der Seite automatisch zur vorherigen Seite zurückgekehrt wird.“
Antwort.Write „〈<I>script</I> language=java<I>script</I>〉“ & vbCrlf
Response.Write „history.back(1);“
Response.Write „〈/<I>script</I>〉“
Antwort.Ende
else 'Wenn es sich um den Startseitendatensatz handelt, ist er leer und es wird angezeigt, dass kein Inhalt vorhanden ist.
Response.Write „〈Schriftfarbe=blau〉Es gibt keinen Inhalt in dieser Kategorie〈/Schriftart〉“
Ende wenn
endIf
Zusammenfassung: Durch Front-End-Skripte und SQL-Abfragefähigkeiten sind leistungsstarke Paging-Programme einfach und schnell.
Ich hoffe, dass Kollegen bessere Echtzeit-Daten-Paging-Algorithmen entwickeln können.
Hinweis: Da das Forum HTML-Zeichen einschränkt, sind Schlüsselsymbole enthalten Chinesische Großbuchstaben.