直至正文
豫言包府
← 众包

豫言操作系统压缩适配 0.1.0

豫言 · 库

以云工原生 DecompressionStream 实现限量解压与 ZIP 条目校验。

压缩云工适配

以云工宿主原生之 DecompressionStream 承公共[压缩公约](../../../豫言操作系统接口/压缩/规范.文言.md),悉以豫言书于 云工宿主句柄桥之上,不藏宿主 JS。

  • 数据入宿主一次:条目数据经 云工物字造字节 成宿主 Blob(越值桥一次,至多十六兆),此后之切、联、流皆于宿主内为之。
  • 解压之径:Blob.stream() 以 pipeThrough 接 DecompressionStream,豫言以 云工读取流块安全 逐块读出:先取块之 byteLength,累计逾出限则释块之柄、止读器而返状一,绝不复制逾限之块入 Wasm;流败为状二;读尽则依“顶者最新,邻者同量级则并”之法联诸块(总复制量为 n log n),惟于果处复制一次。块之大小由宿主定(Node 十六 KiB,本地 workerd 四 KiB)。
  • 归档条目之验:条目包为 gzip 容器——十字节首、条目之 deflate 流、八字节尾(CRC-32 与 ISIZE,小端)——授 DecompressionStream('gzip'),由平台验之。存之法之数据先包为 deflate 存储块:每块至多六万五千五百三十五字节,块首为新造之五字节小 Blob,块体为原数据 Blob 之 slice,末块置 BFINAL;数据空则造一空末块。容器皆于宿主以 Blob 联之,不逐字节搬大数据入豫言,亦不于豫言算 CRC-32。
  • 别状二与三:存之法先较其长(大于出限为一,不等所期为三);deflate 之法 gzip 验败后,以 raw deflate 复解一过而依同限累计(逾一、败二、成则为 CRC-32 或实数不合而三)。真 workerd 遇 gzip 尾验败,不先交已解之块,Node 则先交,故所断不依流先出块或先报错。
  • 柄:所用宿主柄(Blob、流、转换流、读器、块、存储块首与切片)用毕即释;试验于同一事内反复解压,不触四〇九六之柄限。
  • 参数之校在豫言:出限、入长、法、CRC-32 之界、所期实数;违者抛豫言之异(非宿主 JS 之错)。

验:Node 与 wrangler 4.129.0 本地 workerd 皆过同一试验(见 一致性验证/):与 zlib.inflateRawSync、zlib.deflateRawSync、zlib.crc32 对拍,覆存储块之边、压缩之炸(二百 MiB 之出,于一 MiB 之限取消,用时数毫秒至数十毫秒)及随机扰动之对拍。

所赖

观包之制

上传之记

今修订:1 ·

  1. 修订 1
    取 ZIP

包之层级

父:豫言操作系统适配

无子包。