shelf_gzip
Shelf middleware to GZIP encoding responses, with compression level and compression scope by content-type.
Usage
import 'dart:async' show runZonedGuarded;
import 'dart:io';
import 'package:path/path.dart' show join, dirname;
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:shelf_gzip/shelf_gzip.dart';
import 'package:shelf_static/shelf_static.dart';
void main() {
// Assumes the server lives in bin/ and that `pub build` ran
var pathToBuild =
join(dirname(Platform.script.toFilePath()), '..', 'build/web');
var staticHandler =
createStaticHandler(pathToBuild, defaultDocument: 'index.html');
var portEnv = Platform.environment['PORT'];
var port = portEnv == null ? 9999 : int.parse(portEnv);
runZonedGuarded(() async {
var handler = const shelf.Pipeline()
.addMiddleware(gzipMiddleware)
.addHandler(staticHandler);
await shelf_io.serve(handler, '0.0.0.0', port);
print("Serving $pathToBuild on port $port");
}, (e, stackTrace) => print('Server error: $e $stackTrace'));
}
When not compress
The gzip
encoding won't be applied if:
-
The
Content-Type
is for an already compressed type. SeeisAlreadyCompressedContentType
. -
A small response body (length < 512) will not benefit from being compressed.
Compression Level
The default gzip
encoder compression level is set to 4,
since this is the recommended level for live compression
(not stored file compression). A level 4 compression
has the best trade off for text/code content and CPU usage.
- The original default
gzip
encoder compression level is 6.
Features and bugs
Please file feature requests and bugs at the issue tracker.
Authors
License
Libraries
- shelf_gzip
shelf
support forgzip
encoding responses.