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.