#brotli #rocket #gzip

rocket_async_compression

使用 async-compression 库,为 Rocket Web 服务器提供 gzip 和 brotli 格式的响应压缩

9 个版本 (5 个破坏性更新)

0.6.0 2024年4月10日
0.5.1 2023年11月19日
0.5.0 2023年6月15日
0.2.0 2022年11月18日
0.1.0 2021年11月2日

压缩 中排名第 216

Download history 88/week @ 2024-04-22 78/week @ 2024-04-29 43/week @ 2024-05-06 31/week @ 2024-05-13 29/week @ 2024-05-20 38/week @ 2024-05-27 41/week @ 2024-06-03 67/week @ 2024-06-10 45/week @ 2024-06-17 75/week @ 2024-06-24 122/week @ 2024-07-01 81/week @ 2024-07-08 83/week @ 2024-07-15 23/week @ 2024-07-22 22/week @ 2024-07-29 18/week @ 2024-08-05

每月下载量 146
thangail 中使用

MIT 许可证

24KB
401

Rocket Async Compression

此库为 Rocket 提供 gzip 和 brotli 格式的响应压缩,使用 async-compression 库。

我希望最终将其合并到 Rocket 本身中,因为它是一个非常有用的功能,我自己在 Web 服务器中几乎离不开它。

安装

将其添加到 Cargo.toml

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

使用

以下示例仅在构建为发布模式时启用压缩。在本地开发时,使用未优化的调试构建时,压缩可能会非常缓慢。

#[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())
    }
}

缓存压缩

在服务静态文件时,可以避免为每个请求重复压缩相同的文件的工作。此 crate 提供了一个替代的 CachedCompression 公平处理,它将缓存的响应存储在内存中,并在可用时使用它们。

请注意,缓存的响应不会过期,并将在整个程序的生命周期中保留在内存中。您应仅为此公平处理压缩不会在服务器运行期间更改的静态文件。

#[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"]))
}

依赖关系

~22–53MB
~1M SLoC