Optimiertes Erstellen von DropDowns
Geschrieben von: Stephan Troxler Das Problem tritt überall dort auf, wo überlange Dropdownmenüs mit Dutzenden, ja vielleicht sogar Hunderten von Einträgen aus einer Datenbank gelesen und aufbereitet werden. Durch die enorme Datenmenge, welche normalerweise über ein Recordset abgearbeitet und HTML-konform aufbereitet werden muss, verzögert sich der Seitenaufbau schnell einmal um einige Sekunden. Das muss nicht sein! Dieser Artikel zeigt einen cleveren Weg auf, wie mittels weniger Tricks der grösste Teil der Arbeit der Datenbank überlassen wird. Es war einmalNehmen wir als Beispiel ein Dropdown welches alle Ländernamen der Welt auflistet, wie man es häufig im Web antrifft. Die Daten sind in einer Datenbanktabelle "countries" abgelegt, die Spalte mit dem Ländernamen heisst "name" und diejenige mit dem dazugehörigen Länderkürzel "code". Das Ganze sieht in etwa wie folgt aus:
Um dem Benutzer das Ausfüllen der Seite abzunehmen, wollen wir anhand seiner Spracheinstellungen aus dem Browser zusätzlich noch dynamisch den Eintrag seines Landes vorselektieren. Den ermittelten Ländercode haben wir dazu in einer lokalen Variablen "selectedcountry" abgelegt. Das Unheil nimmt seinen LaufIm Normalfall würden wir das Länder-Dropdownmenu nun in etwa so generieren: HTML-Code... <select name="mydropdown"> <% Datenbankverbindung öffnen, Recorset (RS) erstellen ... While not RS.EOF if RS("code") = selectedcountry then myselect = "selected" else myselectd = "" end if %> <option value="<% =RS("code") %>" <% =myselect %>><% =RS("name")%></option> <% wend %> </select> HTML-Code... Aufwendig ist an dieser Methode einerseits die Vermischung zwischen ASP- und HTML-Code und andererseits die Schleife, welche jedes Element des Recordsets behandelt und mit dem vorgegebenen Ländercode vergleicht. Dieses Vorgehen lässt sich zugegebenermassen noch geringfügig optimieren, in dem der ganze HTML-Code zunächst serverseitig generiert, und dann an einem Stück ausgegeben wird. Unter dem Strich bleibt aber die Schleife über alle Elemente des Recordsets, welche bei grösseren Aufzählungen enorm an der Performance der Seite nagt. Folglich muss genau hier angesetzt werden. Alle auf einen StreichWas als ersten Schritt liegt näher, als uns den ganzen späteren HTML-Code bereits in der Abfrage generieren zu lassen? Die nachfolgende SELECT Abfrage zeigt, wie man geschickt den HTML-Code, samt Selektierung des richtigen Landes ins Recordset einfliessen lassen kann. Beispiel für Access: SELECT '<option value=""' + Cstr(code) + '""' + iif(Cstr(code)=Cstr(" & myselect & "),' selected ','') + '>' + name + '</option>' FROM countries ORDER BY name Beispiel für MS SQL Server: SELECT '<option value=""' + code + '""' + CASE ID WHEN '" & myselect & "' THEN ' selected' ELSE '' END + '>' + name + '</option>' FROM countries ORDER BY name Drei Sachen machen die obenstehenden SQL-Statements speziell:
Dropdown aus dem SackNach dem Absetzen des SQL-Befehls bekommen wir nun also ein Recordset mit nur einer Spalte zurück, in welcher der fertige HTML-Code des Dropdownmenus abgebildet ist. Doch wie lesen wir dieses nun geschickt aus? Das Zauberwort ist GetString, eine Methode des Recordset-Objekts welches uns den ganzen Inhalt als String zurückliefert, wie wir ihn für die Ausgabe im HTML-Code brauchen. Das überarbeitete Beispiel sieht dann in etwa wie folgt aus: HTML-Code... <select name="mydropdown"> <% Datenbankverbindung öffnen, Recorset (RS) erstellen .. Response.Write(RS.GetString) %> </select> HTML-Code... SchlußbemerkungDer Artikel zeit, wie man mit der richtigen Kombination aus Datenbeschaffung und der optimalen Nutzung von VB-Script auch aus klassischem ASP immer wieder einiges herausholen kann. Wenn man den ganzen Zugriff in eine Funktion packt, sind bestehende ASP-Seiten schnell überarbeitet und der einen oder anderen Applikation kann so nochmals etwas Vorschub gegeben werden. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Auto-Generierung von performantem Abfragecode Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |