Skip to content

Compression API

#include "webview/compression.hpp"。资源压缩力度枚举,仅构建期 gen_assets_rc.py 扫描源码 Compression::X token 消费。

枚举

cpp
enum class Compression { None, Fast, Normal, Max };
LZMA2 preset说明
None不压缩(默认,per-file RCDATA,mode=raw)
Fast1最快,压缩率低
Normal5平衡
Max9最慢,压缩率最高

level 映射

cpp
inline int compressionLevel(Compression c);
// Fast→1, Normal→5, Max→9, None→0(store,理论不走到)

配置点

Window::Opts::compression(默认 None)+ OptsBuilder::compression(c)

cpp
webview::Window::opts()
    .url(L"src/assets/html/index.html")
    .compression(webview::Compression::Max);

构建期扫描

gen_assets_rc.py 正则 Compression::(None|Fast|Normal|Max) 扫源码字面量,决定 py7zr LZMA2 preset。运行期不读此枚举——读 manifest mode 字段分流(raw / 7z)。

None 时:py7zr 打 assets.7z,单条 rASSET_7Z RCDATA,manifest mode=7zNone 时:per-file RCDATA,mode=raw(向后兼容)。

archive.hpp

运行期解压(框架内部用,消费方一般不直接调):

cpp
bool extract7zToMemory(const void* data, std::size_t len, AssetCache& out);
// AssetCache = std::unordered_map<std::string, std::vector<uint8_t>>

用 vendored 7z Dec SDK 解 .7z 内存块到 map。失败返 false。