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
每月下载量 146 次
在 thangail 中使用
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