ASP Tipp 12: Kopieren Sie häufig verwendete Daten in Skriptvariablen
Beim Zugriff auf COM-Objekte in ASP sollten Sie häufig verwendete Objektdaten in Skriptvariablen kopieren. Dadurch werden die im Vergleich zum Zugriff auf Skriptvariablen relativ kostspieligen COM-Methodenaufrufe reduziert. Beim Zugreifen auf Collection- und Dictionary-Objekte reduziert diese Methode außerdem teure Suchen.
Wenn Sie mehrmals auf Objektdaten zugreifen, sollten Sie sie im Allgemeinen in einer Skriptvariablen ablegen. Request-Variablen (Form- oder QueryString-Variablen) sind für diese Optimierung ideal. Ihre Site gibt z. B. eine QueryString-Variable namens UserID weiter. Angenommen auf diese UserID wird auf einer bestimmten Seite ein Dutzend Mal verwiesen. Weisen Sie die UserID am oberen Rand der ASP-Seite einer Variablen zu, anstatt Request(„UserID“) ein Dutzend Mal aufzurufen, und verwenden Sie diese Variable dann überall auf der Seite. Damit sparen Sie 11 COM-Methodenaufrufe.
In der Praxis kann der Zugriff auf COM-Eigenschaften und -Methoden unerwartet kostspielig sein. Das folgende Beispiel enthält (syntaktisch gesprochen) ziemlich gängigen Code:
Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
If Foo.bar.blah.zaq = Foo.bar.blah.abc Then ‚ …
Beim Ausführen des Codes geschieht Folgendes:
- Die Variable Foo wird als globales Objekt aufgelöst.
- Die Variable bar wird als Mitglied von Foo aufgelöst. Dies ist ein COM-Methodenaufruf.
- Die Variable blah wird als Mitglied von Foo.bar aufgelöst und ist ebenfalls ein COM-Methodenaufruf.
- Die Variable qaz wird als Mitglied von foo.bar.blah aufgelöst, und dies ist ebenfalls ein COM-Methodenaufruf.
- Rufen Sie Foo.bar.blah.quaz(1) auf. Es wird ein weiterer COM-Methodenaufruf ausgeführt. Alles klar?
- Wiederholen Sie Schritt 1 bis 3, um baz aufzulösen. Das System weiß nicht, ob das Objektmodell durch den Aufruf von qaz geändert wurde. Deshalb müssen die Schritte 1 bis 3 wiederholt werden, um baz aufzulösen.
- Lösen Sie baz als Mitglied von Foo.bar.blah auf. Fähren Sie die Eigenschafteneingabe aus.
- Wiederholen Sie Schritt 1 bis 3, um zaq aufzulösen.
- Wiederholen Sie Schritt 1 bis 3, um abc aufzulösen.
Wie Sie sehen, ist dies unheimlich ineffizient (und langsam). Um diesen Code schnell in VBScript zu schreiben, verwenden Sie Folgendes:
Set myobj = Foo.bar.blah ‚ do the resolution of blah ONCE
Myobj.baz = myobj.qaz(1)
If Myobj.zaq = Myobj.abc Then ‚…
Wenn Sie VBScript 5.0 oder höher verwenden, können Sie beim Schreiben die With-Anweisung verwenden.
With Foo.bar.blah
.baz = .qaz(1)
If .zaq = .abc Then ‚…
…
End With
Dieser Tipp gilt auch für das Programmieren mit VB.