HTTP2 vs HTTP1-prestaties

· Functies

sgcWebSockets ondersteunt een breed scala aan protocollen; HTTP/2 is het protocol dat op dit moment in ontwikkeling is. 

HTTP 1.1 is de afgelopen 15 jaar het meest gebruikte HTTP-protocol geweest en is breed geïmplementeerd in servers en clients. Maar naarmate het internet groeide, applicaties en websites groter werden en de hoeveelheid geladen data toenam, werden de tekortkomingen van HTTP 1.1 duidelijker. In essentie: één aanvraag per verbinding en duplicatie van aanvragen.

HTTP 2 heeft een aantal voordelen, zoals: 


HTTP 1.1 testen 

De test is heel simpel: roep de server 100 keer aan om één voor één een afbeelding op te halen, dus zodra de eerste klaar is, wordt de tweede aanvraag verstuurd, enzovoort

procedure TestHTTP1;
begin
  oHTTP := TIdHTTP.Create(nil);
  Try
    for i := 1 to 100 do
    begin
      oStream := TMemoryStream.Create;
      Try
        oHTTP.Get('https://ik.imagekit.io/demo/img/http_test/h_' + Format('%.2d', [i]) + '.jpg', oStream);
        oJPEG := TJPEGImage.Create;
        oJPEG.Scale := jsHalf;
        oStream.Position := 0;
        oJPEG.LoadFromStream(oStream);
        ...
        TThread.Queue(nil,
        procedure
        begin
          FRMHTTP2_Client.imgHTTP.Canvas.Draw(vCol * 50, vRow * 50, oJPEG);
        end);
      Finally
        oStream.Free;
      End;
    end;
  Finally
    oHTTP.Free;
    Terminate;
  end;      
end;   

HTTP 2.0 testen

De test is nog eenvoudiger dan met HTTP 1.1: maak de http2-component aan en doe 100 keer een GET-aanvraag; je hoeft niet op een antwoord te wachten, omdat antwoorden asynchroon worden verwerkt wanneer ze door de client worden ontvangen. 

procedure TestHTTP2;
var
  oHTTP2: TsgcHTTP2Client;
begin
  oHTTP2 := TsgcHTTP2Client.Create;
  oHTTP2.OnHTTP2Response := OnHTTP2ResponseEvent;
  oHTTP2.Request.Accept := 'image/*,*/*;q=0.8';
  for i := 1 to 100 do
    oHTTP2.Get('https://ik.imagekit.io/demo/img/http_test/h_' + Format('%.2d', [i]) + '.jpg');
end;
procedure OnHTTP2ResponseEvent(const Connection: TsgcHTTP2ConnectionClient; const Request: TsgcHTTP2RequestProperty; const Response: TsgcHTTP2ResponseProperty);
var
  oJPEG: TJPEGImage;
  vCol, vRow: Integer;
begin
  oJPEG := TJPEGImage.Create;
  oJPEG.LoadFromStream(Response.Data);
  oJPEG.Scale := jsHalf;
  ...
  TThread.Queue(nil,
  procedure
  begin
    if Assigned(imgHTTP2) then
    begin
      imgHTTP2.Canvas.Draw(vCol * 50, vRow * 50, oJPEG);
    end;
  end);
end;   

En de winnaar is...

Hoogstwaarschijnlijk weet je al welk protocol sneller is; je kunt het zelf testen met de volgende gecompileerde demo voor Windows. 

OPMERKING: in de demo draait de HTTP1.1-test in een aparte thread en is HTTP2.0 asynchroon, dus daarvoor is geen aparte thread nodig.