horse-compression is an official middleware for compressing content in APIs developed with the Horse framework.
We created a channel on Telegram for questions and support:
⚙️ Installation
Installation is done using the boss install command:
boss install horse-compression
If you choose to install manually, simply add the following folders to your project, in Project > Options > Resource Compiler > Directories and Conditionals > Include file search path
✔️ Compatibility
This middleware is compatible with projects developed in:
- Delphi
- Lazarus
☑️ Compression types
Currently, the middleware is prepared to compress the data using DEFLATE and GZIP.
| Type | Delphi | Lazarus |
|---|---|---|
| DEFLATE | ✔️ | ✔️ |
| GZIP | ✔️ | ❌ |
⚡️ Quickstart Delphi
uses Horse, Horse.Jhonson, Horse.Compression, // It's necessary to use the unit System.JSON; begin THorse .Use(Compression()) // Must come before Jhonson middleware .Use(Jhonson); // You can set compression threshold: // THorse.Use(Compression(1024)); THorse.Get('/ping', procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc) var I: Integer; LPong: TJSONArray; begin LPong := TJSONArray.Create; for I := 0 to 1000 do LPong.Add(TJSONObject.Create(TJSONPair.Create('ping', 'pong'))); Res.Send(LPong); end); THorse.Listen(9000); end;
⚡️ Quickstart Lazarus
{$MODE DELPHI}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Horse, Horse.Jhonson, Horse.Compression, // It's necessary to use the unit fpjson, SysUtils; procedure GetPing(Req: THorseRequest; Res: THorseResponse; Next: TNextProc); var I: Integer; LPong: TJSONArray; LJson: TJSONObject; begin LPong := TJSONArray.Create; for I := 0 to 1000 do begin LJson := TJSONObject.Create; LJson.Add('ping', 'pong'); LPong.Add(LJson); end; Res.Send<TJSONArray>(LPong); end; begin THorse .Use(Compression()) // Must come before Jhonson middleware .Use(Jhonson); // You can set compression threshold: // THorse.Use(Compression(1024)); THorse.Get('/ping', GetPing); THorse.Listen(9000); end.
🚀 Statistics
When using the middleware, the response size was approximately 67 times smaller. Data were collected using the project available within the samples (delphi) folder. To default, responses less than or equal to 1024 bytes will not be compressed.
| Property | Without | With |
|---|---|---|
| Time(ms) | 108 | 126 |
| Size(bytes) | 15.770 | 236 |
⚠️ License
horse-compression is free and open-source middleware licensed under the MIT License.