#http2 #cloudflare #jpeg #optimization #http-header

bin+lib cloudflare-soos

Cloudflare 增强型 HTTP/2 和 HTTP/3 优先级辅助工具,使渐进式图像加载更快。支持 JPEG、GIF 和 PNG。

6 个稳定版本

2.3.1 2023年11月14日
2.3.0 2023年9月8日
2.2.0 2022年10月12日
2.1.0 2021年10月7日
1.18.0 2020年3月20日

#350 in 图像

Download history 44/week @ 2024-04-15 37/week @ 2024-04-22 27/week @ 2024-04-29 69/week @ 2024-05-06 172/week @ 2024-05-13 90/week @ 2024-05-20 84/week @ 2024-05-27 45/week @ 2024-06-03 43/week @ 2024-06-10 57/week @ 2024-06-17 22/week @ 2024-06-24 152/week @ 2024-07-01 43/week @ 2024-07-08 172/week @ 2024-07-15 84/week @ 2024-07-22 289/week @ 2024-07-29

每月 590 次下载
用于 mozjpeg-sys

MIT/Apache

80KB
2K SLoC

扫描偏移量

用于 HTTP/2 并行渐进式流和 HTTP/3 优先级功能的渐进式图像解析器。

计算 cf-priority-changePriority 标头的最佳偏移量,以实现具有“预览”和“足够好”阶段的渐进式图像渲染。在 JPEG 中,它尝试仅渲染 DC 通道(libjpeg-turbo 对仅 DC 阶段有特殊支持,以实现更好的模糊效果),然后优先发送足够的数据以使图像看起来完全加载。

对于 GIF 动画,它优先发送第一帧。在交错 PNG 中,它大致猜测渐进式扫描。对于非渐进式图像,它尝试在发送任何其他数据之前发送图像尺寸,以帮助页面布局并(改进累积布局位移(CLS)指标)。

构建和使用

安装 Rust 1.60 或更高版本,并运行

cargo install cloudflare-soos
soos-cf-priority image.jpg [--rfc9218]

这将输出到标准输出(stdout)Cloudflare的cf-priority(第一行)和cf-priority-change(第二行)头信息,并为image.jpg文件设置断点,错误输出到标准错误(stderr)。当提供--rfc9218参数时,将输出HTTP3 priority头信息,例如:u=1;i=?0,change=(1000;u=3;i=?0 10000;u=5;i 100000;u=6;i)。如果未指定路径,则从标准输入(stdin)读取图片。此工具需要渐进式JPEG文件,对于基线JPEG或其他格式不执行任何操作。

可以通过使用此crate作为库并以编程方式执行相同操作,调用soos::Scans::from_file(jpeg_bytes)?.cf_priority_change_headers()?soos::Scans::from_file(jpeg_bytes)?.rfc9218_priority_change_headers()?(为rfc9218(h3)优先级头信息)。

您还可以使用rustup target add wasm32-unknown-unknown; cargo build --release --target=wasm32-unknown-unknown为WASM构建,或者使用wasm-pack

示例工具

cargo run --example cf-priority -- image.jpg
cargo run --example rfc9218-priority -- image.jpg
cargo run --example scan -- image.jpg

这些工具显示了用于生成HTTP优先级头的调试信息。

鸣谢

JPEG解析基于Ulf Nilsson的jpeg-decoder。GIF解析来自Piston GIF crate。

依赖关系

~0–470KB