perf(compress): optimize short logs by bypass compressing under 128 bytes

This commit is contained in:
duorameng
2026-07-09 20:36:47 +08:00
parent 516a91acc2
commit b67fa5bd58
4 changed files with 64 additions and 10 deletions
+16 -4
View File
@@ -11,7 +11,10 @@ import (
"github.com/klauspost/compress/zstd"
)
const zstdPrefix = "zstd:"
const (
zstdPrefix = "zstd:"
rawPrefix = "raw:"
)
var zlibWriterPool = sync.Pool{
New: func() interface{} {
@@ -71,23 +74,32 @@ func initZstd() {
})
}
// CompressToBase64 compresses data using zstd and encodes to base64 with a prefix
// CompressToBase64 compresses data using zstd and encodes to base64 with a prefix (uses raw for data under 128 bytes)
func CompressToBase64(data string) (string, error) {
if data == "" {
return "", nil
}
initZstd()
// 小于等于 128 字节,不需要压缩,直接前缀明文保存
if len(data) <= 128 {
return rawPrefix + data, nil
}
initZstd()
compressed := zstdEncoder.EncodeAll([]byte(data), nil)
return zstdPrefix + base64.StdEncoding.EncodeToString(compressed), nil
}
// DecompressFromBase64 decodes base64 and decompresses data (supports zstd prefix and falls back to zlib)
// DecompressFromBase64 decodes base64 and decompresses data (supports raw/zstd prefix and falls back to zlib)
func DecompressFromBase64(data string) (string, error) {
if data == "" {
return "", nil
}
if strings.HasPrefix(data, rawPrefix) {
return data[len(rawPrefix):], nil
}
if strings.HasPrefix(data, zstdPrefix) {
initZstd()
encoded := data[len(zstdPrefix):]