Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Vezögerung beim laden der Seiten mit IdHTTP? (https://www.delphipraxis.net/202135-vezoegerung-beim-laden-der-seiten-mit-idhttp.html)

uups 1. Okt 2019 15:58

Vezögerung beim laden der Seiten mit IdHTTP?
 
Ich lade testweise eine bestimmte Seite mit Indys TIdHTTP und messe dabei mit QueryPerformanceCounter die Zeit, die der Client dafür braucht. Zum Vergleich lade ich die selbe Seite im Firefox und beobachte den Ladevorgang mit Netzwerkanalyse-Tool von Firefox (Menü -> Web-Entwickler -> Netzwerkanalyse). Laut dem Tool braucht der Browser im Schnitt etwa 10x so wenig Zeit für den Ladevorgang (reines HTML ohne Ressourcen und Media). Wo ist der Haken?

Ich gebe zu, dass der QueryPerformanceCounter vielleicht nicht die beste Methode ist und auch auf das Netzwerkanalyse-Tool des Browsers ist kein 100%-ger Verlass, aber dass sich die Ladezeiten so gravierend unterscheiden hätte ich nicht erwartet. Ich habe sogar versucht, für den Request die gleichen Bedingungen zu schaffen, die der Browser hat, geändert hat sich dabei nichts.

Delphi-Quellcode:
begin
  ...
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSLHandler.SSLOptions.Method := sslvTLSv1;
  Compressor := TIdCompressorZLib.Create(nil);
  http := TIdHTTP.Create(nil);
  http.IOHandler := SSLHandler;
  http.Compressor := Compressor;
  http.CookieManager := MainCookieManager;
  http.HandleRedirects := true;
  //http.ConnectTimeout := 1000;
  //http.ReadTimeout := 1000;
  http.Request.AcceptLanguage := 'de,en-US;q=0.7,en;q=0.3';
  http.Request.AcceptEncoding := 'gzip, deflate, br';
  http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0';
  try
    QueryPerformanceFrequency(freq);
    QueryPerformanceCounter(startTime);
    Source := http.get(TEST_URL);
    QueryPerformanceCounter(endTime);
    RequestDuration := (endTime - startTime) * 1000 div freq;
  except
  end;
  http.Free;
  SSLHandler.Free;
...
end;


Für die Tests nutze ich ein sauberes, nicht ausgelastetes Windows Server.

Der schöne Günther 1. Okt 2019 16:59

AW: Vezögerung beim laden der Seiten mit IdHTTP?
 
Caching?

Mir ist nur aufgefallen dass dein Codeschnipsel unten beim ersten mal ein vielfaches der Zeit braucht als wenn man ein zweites, drittes mal auf den Button drückt. Dein Firefox wird sicher wohl auch einiges cachen?

Ich bekomme beim ersten Aufruf auch ungefähr ein Verhältnis von 1:10 - 1:15, danach ist der Browser "nur noch" doppelt so schnell. Das finde ich eigentlich einen ganz guten Wert wenn sich der gute Delphi-Compiler plus Indy-Library mit millionen(millarden?)-fach benutzter, hoch-optimierter Software messen muss...

hoika 2. Okt 2019 03:58

AW: Vezögerung beim laden der Seiten mit IdHTTP?
 
Hallo,
welche Version der SSL-Bibliotheken benutzt Du?
Was passiert, wenn Du http statt https benutzt?

uups 2. Okt 2019 10:24

AW: Vezögerung beim laden der Seiten mit IdHTTP?
 
Guten Morgen!

Zitat:

Zitat von Der schöne Günther (Beitrag 1448687)
Caching?

Bestimmt, lade die Daten in einen String. Das ganze Overhead mit dem Laden in den Speicher und anschließend das Charset-Decoding zu UTF-16 usw. schlucken bestimmt eine oder andere Milliskunde.

Zitat:

Zitat von Der schöne Günther (Beitrag 1448687)
Ich bekomme beim ersten Aufruf auch ungefähr ein Verhältnis von 1:10 - 1:15, danach ist der Browser "nur noch" doppelt so schnell. Das finde ich eigentlich einen ganz guten Wert wenn sich der gute Delphi-Compiler plus Indy-Library mit millionen(millarden?)-fach benutzter, hoch-optimierter Software messen muss...

Da stimme ich zu, nicht desto trotz würde mich interessieren, was genau in meinem Fall das Ganze "doppelt so langsam" macht. Ist das die fehlerhafte Konfiguration des Sockets, die zu Verzögerungen bei den Anfragen führt? Oder liegt das Problem womöglich tiefer in den Indy-Sources? Spannend.

Zitat:

Zitat von hoika (Beitrag 1448746)
welche Version der SSL-Bibliotheken benutzt Du?
Was passiert, wenn Du http statt https benutzt?

Die OpenSSL-DLLs haben die Versionsnummer 1.0.2.18.
Wenn ich http statt https benutze, wird die Seite auf https umgeleitet.

Union 2. Okt 2019 13:37

AW: Vezögerung beim laden der Seiten mit IdHTTP?
 
Vollständig rausfinden wirst du es nur wenn Du die Indy Library profilest.

Der schöne Günther 2. Okt 2019 16:31

AW: Vezögerung beim laden der Seiten mit IdHTTP?
 
Ich bin da nicht am Ball geblieben, aber interessant wäre vielleicht auch ob es nicht z.B. über HTTP/2 übertragen wird. Das soll ja vorrangig die Übertragungsgeschwindigkeit gegenüber HTTP verbessern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz