Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Messen der Verbindungsgeschwindigkeit

Geschrieben von: Christian Koller
Kategorie: Komponenten

This printed page brought to you by AlphaSierraPapa

Im Internet ist ein deutlicher Trend zu größeren Datenströmen hin festzustellen. Ob nun ein Anwender einen Film online ansieht, Internet-Radio hört, oder ein MP3-File aus dem Web abspielt, immer ist ein großer Datenstrom zwischen Browser und Internetserver erforderlich.

Ein Browser kann über Leitungen unterschiedlicher Geschwindigkeit eine Internetseite von einem Server abrufen. Folgende Faktoren begrenzen die Verbindungsgeschwindigkeit zwischen Browser und Internetserver:

Für Sie als ASP Programmierer bedeutet das, daß Sie Ihre Webapplikationen auf sehr unterschiedliche Datenübertragungsraten abstimmen müssen. Wenn man eine Webapplikation erstellt, die auch mit der langsamsten Verbindung sehr gut arbeiten kann, so muß man zwangsläufig Kompromisse eingehen, zum Beispiel kleinere Grafiken verwenden, keine animierten Bilder oder Videosequenzen in die Internetseite einbinden, usw.

Aus diesem Grund ist es oftmals wünschenswert die Datenübertragungsgeschwindigkeit zwischen einem bestimmten User und dem Internetserver zu bestimmen, um je nach Geschwindigkeit dem User unterschiedliche Versionen der Webapplikation bereitstellen zu können.

Einfach geht es, wenn man die Professional oder Enterprise Edition der BrowserHawk 2000 Server-Komponente (Firma CyScape) verwendet. Diese Komponente erlaubt Ihnen mit einfachen ASP Befehlen die Datenübertragungsrate zwischen Browser und Server festzustellen. Ausserdem liefert Ihnen diese Komponente viele andere Browsereigenschaften.

Das folgende ASP Beispiel zeigt Ihnen die Anwendung der BrowserHawk 2000 Komponente (ausführbares Beispiel):

<%
' Test-Seite darf nicht gecached werden
' um vernuenftige Resultate zu bekommen
Response.Expires=0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"

Set BrowserHawk = Server.Createobject("CyScape.Browserobj")
BrowserHawk.GetExtProperties
If BrowserHawk.JavaScriptEnabled = True Then
  BrowserHawk.SpeedDetector , "Bitte warten...", _
  " Die Verbindung wird getestet, bitte warten..."
End If
%>
<html>
<head>
  <title>Verbindungsgeschwindigkeit: Test Resultat</title>
</head>
<body>

<p>Ihre Verbindungsgeschwindigkeit:
<%
Speed = BrowserHawk.ConnectionSpeed

If Speed = -1 Then
  If (Not BrowserHawk.JavaScriptEnabled) Then
    Response.Write "Geschwindigkeit nicht messbar da " & _
    "JavaScript am Browser nicht ausgeführt werden kann."
  Else
    Response.Write "Kleiner als 10 KBytes/sec " & _
    "(schlechte Verbindung oder zu großer Datenstrom)"
  End If
Else
  kBytesProSec = Speed / 8
  If kBytesProSec > 2000000 Then
    Response.Write "Nicht messbar " & _
	  "(intern zu hoher Wert ermittelt)"
    Else
      Response.Write FormatNumber(kBytesProSec) & _
      " KBytes/sec"
    End If
End If

Set BrowserHawk = Nothing
%>
</p>

</body>
</html>

Der ASP Code verwendet die ConnectionSpeed Eigenschaft des BrowserHawk Objektes um die Verbindungsgeschwindigkeit zu erhalten. Bevor man jedoch einen Wert aus dieser Eigenschaft auslesen kann, muß man erst die SpeedDetector Methode ausführen.

Da die SpeedDetector Methode zur Bestimmung der Datenübertragungsrate im Browser ein JavaScript Programm ablaufen lässt, ist es günstig, vor dem Aufrufen der SpeedDetector Methode zu prüfen, ob der Browser JavaScript ausführen kann. Dies geschieht durch Aufruf der GetExtProperties Methode und dem Auslesen der JavaScriptEnabled Eigenschaft. Liefert die JavaScriptEnabled nach Aufruf der GetExtProperties Methode den Wert True, so ist der Browser in der Lage JavaScript Programme auszuführen.

Was die SpeedDetector Methode genau macht ist schnell erklärt: Sie schickt ein JavaScript Programm zum Browser, das aus 3 Blöcken besteht:

  1. Block speichert die aktuelle Zeit in der JavaScript Variable stm.
  2. Block lädt einen großen Textblock vom Server
  3. .
  4. Block speichert die aktuelle Zeit nach dem Laden in der JavaScript Variable etm, bildet die Differenz zwischen etm und stm (in Millisekunden), und dividiert das Ergebnis durch 1000 um die Zeitdifferenz in Sekunden zu erhalten. Danach wird die Größe des geladenen Textblockes (in Bit) durch die Zeitdifferenz (in Sekunden) dividiert und das Ergebnis (Bit/sec) in der JavaScript Variablen kbps gespeichert.
Wenn schließlich die Seite geladen und alle JavaScript Blöcke ausgeführt worden sind, dann veranlasst eine JavaScript Funktion den Brower die ursprüngliche Seite zu laden. In der URL der geladenen Seite wird im QueryString die Variable bhkbps mit dem Wert der JavaScript Variablen kbps belegt. Die QueryString Variable bhjs erhält den Wert 0 um anzuzeigen, daß die SpeedDetector Methode erfolgreich ausgeführt wurde.

Wenn eine ASP Seite die SpeedDetector oder GetExtProperties Methode der BrowserHawk Komponente ausführt, so kann sie nicht gleichzeitig das Ergebnis eines mittels POST-Methode abgesendeten Formulares entgegen nehmen. Hingegen wird der Inhalt eines mittels GET-Methode abgesendetes Formular problemlos an die ASP Seite weitergereicht.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000414.zip

Verwandte Artikel

Browsereigenschaften mit BrowserHawk 2000 bestimmen
http:/www.aspheute.com/artikel/20000410.htm

Links zu anderen Sites

BrowserHawk
http://www.browserhawk.com/products/bhawk/download.asp

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.