HTTP2 vs HTTP1 Performance

· Özellikler

sgcWebSockets çok çeşitli protokolleri destekler; HTTP/2 şu anda geliştirilmekte olan protokoldür. 

HTTP 1.1, son 15 yılda en çok kullanılan HTTP Protokolü olmuştur ve sunucu ile istemcilerde yaygın olarak uygulanmıştır. Ancak internet büyüdükçe, uygulamalar ve web siteleri büyüdü ve yüklenen veri miktarı arttıkça, HTTP 1.1'in eksiklikleri daha belirgin hale geldi. Temel olarak bağlantı başına bir istek ve isteklerin tekrarlanması.

HTTP 2 şu gibi bazı avantajlara sahiptir: 


HTTP 1.1 Testi 

Test çok basittir; yalnızca bir görüntü almak için sunucuyu 100 kez, birer birer çağırın; böylece ilki bittiğinde ikinci istek gönderilir ve böyle devam eder

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 Testi

Test, HTTP 1.1'e göre daha da basittir; yalnızca http2 bileşenini oluşturun ve istek almak için 100 kez çağırın; yanıt almak için beklemeye gerek yoktur çünkü yanıtlar istemci tarafından alındığında asenkron olarak gönderilir. 

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;   

Ve kazanan...

Büyük olasılıkla hangi protokolün daha hızlı olduğunu zaten biliyorsunuz; windows için aşağıdaki derlenmiş demoyu kullanarak kendiniz test edebilirsiniz. 

NOT: demoda, HTTP1.1 testi ikincil bir iş parçacığında çalışır ve HTTP2.0 asenkron olduğundan ikincil bir iş parçacığında çalışmasına gerek yoktur.