shelf_gzip 4.0.1 shelf_gzip: ^4.0.1 copied to clipboard
Shelf middleware to GZIP encoding responses, with compression level and compression scope by content-type.
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.