Install
$> npm i @rayo/compress
Both Gzip
and Brotli
are supported, and the algorithm will be determined by the accept-encoding
request header.
With multiple values/options (e.g. "gzip, deflate, br"), Gzip
will be preferred.
Use
@rayo/compress
is also compatible withExpress
and many other frameworks.
import rayo from 'rayo';
import compress from '@rayo/compress';
rayo({ port: 5050 })
.through(compress())
.get('/hello/:user', (req, res) => {
res.setHeader('content-type', 'application/json');
res.end(JSON.stringify({
message: `Hello ${req.params.user}.
I am compressed!`
}));
})
.start();
Note: You need to set the right response header, e.g. application/json for
@rayo/compress
to be able to determine whether the payload can be compressed or not. Also keep in mind that not all types of content can be compressed.
@rayo/compress
supports compression on these MIME types:
- text/plain
- text/csv
- text/html
- text/xml
- text/javascript
- application/json
- application/xml
API
compress(options = {})
@param {object} [options]
@returns {function}
-
options.preferBrotli
(boolean, optional): PreferBrotli
if theaccept-encoding
request header has multiple values/options.
Keep in mind thatBrotli
has more performance overhead thanGzip
.
Default:false
. -
options.threshold
(number, optional): The minimum threshold (in bytes) for compressing responses.
Default:1024
. -
options.level
(number, optional): The compression level to use.
Range (gzip):1 to 9
.
Range (brotli):1 to 11
.
A higher level will result in better compression, but will take longer to complete. A lower level will result in less compression, but will be much faster.
Default:6
. -
options.chunkSize
(number, optional): Brake large responses into chunks of this size (in kilobytes). While this setting can have an impact on speed, compression is affected most dramatically by the level setting.
Default:16
.