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:

  1. Die Variable Foo wird als globales Objekt aufgelöst.
  2. Die Variable bar wird als Mitglied von Foo aufgelöst. Dies ist ein COM-Methodenaufruf.
  3. Die Variable blah wird als Mitglied von Foo.bar aufgelöst und ist ebenfalls ein COM-Methodenaufruf.
  4. Die Variable qaz wird als Mitglied von foo.bar.blah aufgelöst, und dies ist ebenfalls ein COM-Methodenaufruf.
  5. Rufen Sie Foo.bar.blah.quaz(1) auf. Es wird ein weiterer COM-Methodenaufruf ausgeführt. Alles klar?
  6. 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.
  7. Lösen Sie baz als Mitglied von Foo.bar.blah auf. Fähren Sie die Eigenschafteneingabe aus.
  8. Wiederholen Sie Schritt 1 bis 3, um zaq aufzulösen.
  9. 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.