更新记录
1.0.0(2026-09-30) 下载此版本
1.0.0 初始化
平台兼容性
uni-app x(5.26)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
uni-zstd
基于 uasm 的 zstd 压缩/解压插件。底层为 C 语言实现的 zstd, 通过 uni-gyp 编译为 App、web、微信和支付宝小程序平台产物,可在 uni-app x 平台用统一 API 调用。
平台支持
| 平台 | 支持 | 说明 |
|---|---|---|
| App(Android / iOS / HarmonyOS) | ✓ | 同步、异步 API 均可用 |
| Web(Chrome / Safari) | ✓ | 仅异步 API |
| 微信小程序 | ✓ | 仅异步 API,不支持多线程 |
安装
将 uni-zstd 导入项目的 uni_modules/ 目录,无需打包自定义基座。
用法一:UASM API
UASM 插件通过 uni.loadUasm() / uni.loadUasmSync() 加载后,得到导出的方法集,再进行压缩/解压。
uni.loadUasm():异步加载,返回Promise<UniZstd>,全平台适用。uni.loadUasmSync():同步加载,仅 App 平台支持。
导出类型
UniZstd见uasm/index.d.ts,仅用于 IDE 语法提示。
一次性压缩 / 解压
let libzstd : UniZstd | null = null
async function loadZstd() {
libzstd = await uni.loadUasm('uni_modules/uni-zstd')
}
// 压缩:input 支持 string 或 ArrayBuffer
async function compressText(text : string) : Promise<ArrayBuffer> {
return await libzstd!.compress(text, 3)
}
// 解压:入参为 ArrayBuffer
async function decompressData(data : ArrayBuffer) : Promise<string> {
const result = await libzstd!.decompress(data)
return new TextDecoder().decode(result)
}
流式压缩 / 解压
数据量较大、需要分块处理时,可使用 Compressor / Decompressor 类。
// 流式压缩
async function streamCompress(chunks : string[]) : Promise<ArrayBuffer> {
const compressor = new libzstd!.Compressor(3)
const parts = [] as ArrayBuffer[]
for (let i = 0; i < chunks.length; i++) {
parts.push(await compressor.update(chunks[i]))
}
parts.push(await compressor.finish())
await compressor.close()
compressor.delete()
return concatBuffers(parts)
}
// 流式解压
async function streamDecompress(chunks : ArrayBuffer[]) : Promise<ArrayBuffer> {
const decompressor = new libzstd!.Decompressor()
const parts = [] as ArrayBuffer[]
for (let i = 0; i < chunks.length; i++) {
// 最后一块传入 finish 前需先 update 完所有数据
parts.push(await decompressor.update(chunks[i]))
}
parts.push(await decompressor.finish())
await decompressor.close()
decompressor.delete()
return concatBuffers(parts)
}
用法二:UTS 插件 API
在 App 平台也可直接 import 插件封装的同步方法。方法签名与 uasm 一致,但为同步返回。
import { compress, decompress } from '@/uni_modules/uni-zstd'
// 压缩
const compressed = compress('hello uni-app x', 3) as ArrayBuffer | null
// 解压
const restored = decompress(compressed!) as ArrayBuffer | null
const text = new TextDecoder().decode(restored!)
API 参考
compress
一次性压缩。
compress(input : string | ArrayBuffer, level ?: number, workers ?: number) : Promise<ArrayBuffer>
| 参数 | 类型 | 说明 |
|---|---|---|
| input | string \| ArrayBuffer |
待压缩数据 |
| level | number |
压缩级别,范围 1~22,默认 3,越大压缩率越高但越慢 |
| workers | number |
并行线程数(仅部分平台生效) |
decompress
一次性解压。
decompress(input : ArrayBuffer, maxOutputSize ?: number) : Promise<ArrayBuffer>
| 参数 | 类型 | 说明 |
|---|---|---|
| input | ArrayBuffer |
已压缩数据 |
| maxOutputSize | number |
解压结果最大字节数,默认 512 1024 1024 |
Compressor
流式压缩器。
new Compressor(level ?: number, workers ?: number)
| 方法 | 说明 |
|---|---|
update(input : string \| ArrayBuffer) : Promise<ArrayBuffer> |
追加一段待压缩数据,返回本次产生的压缩数据 |
finish() : Promise<ArrayBuffer> |
结束压缩,返回剩余压缩数据 |
close() : Promise<void> |
释放压缩上下文 |
delete() : Promise<void> |
释放对象,需在 close() 之后调用 |
Decompressor
流式解压器。
new Decompressor(maxOutputSize ?: number)
| 方法 | 说明 |
|---|---|
update(input : ArrayBuffer) : Promise<ArrayBuffer> |
追加一段待解压数据,返回本次解压出的数据 |
finish() : Promise<ArrayBuffer> |
结束解压,返回剩余解压数据 |
close() : Promise<void> |
释放解压上下文 |
delete() : Promise<void> |
释放对象,需在 close() 之后调用 |
UTS 同步 API
App 平台专用,其余参数与 uasm 一致,返回 ArrayBuffer | null(加载失败时返回 null)。
import { compress, decompress } from '@/uni_modules/uni-zstd'
compress(input : string | ArrayBuffer, level ?: number) : ArrayBuffer | null
decompress(input : ArrayBuffer, maximumOutputSize ?: number) : ArrayBuffer | null
注意事项
- 压缩级别范围为 1~22,默认 3。
- 解压结果默认上限为 512MB,超过时需通过
maxOutputSize指定更大的值。 uni.loadUasm()异步、全平台可用;uni.loadUasmSync()与 UTS 插件 API 仅 App 平台可用。- uasm 返回值为
ArrayBuffer,文本数据需用TextDecoder解码。 - 微信小程序不支持多线程,
workers参数在小程序平台不生效。 - 流式处理后需依次调用
close()和delete()释放资源。

收藏人数:
下载插件并导入HBuilder
下载插件ZIP
赞赏(0)
下载 1530873
赞赏 15
下载 12765807
赞赏 1959
赞赏
京公网安备:11010802035340号