#brotli #rocket #gzip

rocket_async_compression

Response compression in both gzip and brotli formats for the Rocket webserver using the async-compression library

9 releases (5 breaking)

0.6.0 Apr 10, 2024
0.5.1 Nov 19, 2023
0.5.0 Jun 15, 2023
0.2.0 Nov 18, 2022
0.1.0 Nov 2, 2021

#117 in Compression

Download history 3/week @ 2023-12-22 50/week @ 2023-12-29 91/week @ 2024-01-05 102/week @ 2024-01-12 22/week @ 2024-01-19 53/week @ 2024-01-26 35/week @ 2024-02-02 31/week @ 2024-02-09 76/week @ 2024-02-16 76/week @ 2024-02-23 172/week @ 2024-03-01 118/week @ 2024-03-08 69/week @ 2024-03-15 29/week @ 2024-03-22 65/week @ 2024-03-29 148/week @ 2024-04-05

343 downloads per month
Used in thangail

MIT license

24KB
401 lines

Rocket Async Compression

This library provides response compression in both gzip and brotli formats for Rocket using the async-compression library.

I'd love to get this merged into Rocket itself eventually since I think it would be a very useful addition that I myself can barely live without in a webserver.

Installation

Add this to Cargo.toml:

[dependencies]
rocket = "0.5"
rocket_async_compression = "0.5"

Usage

The following example will enable compression only when the crate is built in release mode. Compression can be very slow when using unoptimized debug builds while developing locally.

#[macro_use]
extern crate rocket;

use rocket_async_compression::Compression;

#[launch]
async fn rocket() -> _ {
    let server = rocket::build()
        .mount("/", routes![...]);

    if cfg!(debug_assertions) {
        server
    } else {
        server.attach(Compression::fairing())
    }
}

Cached Compression

When serving static files, it can be useful to avoid the work of compressing the same files repeatedly for each request. This crate provides an alternative CachedCompression fairing which stores cached responses in memory and uses those when available.

Note that cached responses do not expire and will be held in memory for the life of the program. You should only use this fairing for compressing static files that will not change while the server is running.

#[macro_use]
extern crate rocket;

use rocket::fs::{relative, FileServer};
use rocket_async_compression::CachedCompression;

#[launch]
async fn rocket() -> _ {
    rocket::build()
        .mount(
            "/",
            FileServer::from(relative!("static")),
        )
        .attach(CachedCompression::path_suffix_fairing(vec![".js", ".css", ".html", ".wasm"]))
}

Dependencies

~22–57MB
~1M SLoC