Compressao
Compressao
Seção intitulada “Compressao”Comprima e descomprima dados usando algoritmos gzip, deflate, zlib, brotli e zstd.
Carregamento
Seção intitulada “Carregamento”local compress = require("compress")Formato mais amplamente suportado (RFC 1952).
Comprimir {id=“gzip-compress”}
Seção intitulada “Comprimir {id=“gzip-compress”}”-- Comprimir para resposta HTTPlocal body = json.encode(large_response)local compressed, err = compress.gzip.encode(body)if err then return nil, errend
-- Definir header Content-Encodingres:set_header("Content-Encoding", "gzip")res:write(compressed)
-- Compressao maxima para armazenamentolocal archived = compress.gzip.encode(data, {level = 9})
-- Compressao rapida para tempo reallocal fast = compress.gzip.encode(data, {level = 1})| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados para comprimir |
options | table? | Opções de codificação opcionais |
Opções {id=“gzip-compress-options”}
Seção intitulada “Opções {id=“gzip-compress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
level | integer | Nivel de compressao 1-9 (padrão: 6) |
Retorna: string, error
Descomprimir {id=“gzip-decompress”}
Seção intitulada “Descomprimir {id=“gzip-decompress”}”-- Descomprimir requisição HTTPlocal content_encoding = req:header("Content-Encoding")if content_encoding == "gzip" then local body = req:body() local decompressed, err = compress.gzip.decode(body) if err then return nil, errors.new("INVALID", "Invalid gzip data") end body = decompressedend
-- Descomprimir com limite de tamanho (prevenir zip bombs)local decompressed, err = compress.gzip.decode(data, {max_size = 10 * 1024 * 1024})if err then return nil, errors.new("INVALID", "Decompressed size exceeds 10MB limit")end| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados comprimidos GZIP |
options | table? | Opções de decodificação opcionais |
Opções {id=“gzip-decompress-options”}
Seção intitulada “Opções {id=“gzip-decompress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
max_size | integer | Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB) |
Retorna: string, error
Melhor taxa de compressao para texto (RFC 7932).
Comprimir {id=“brotli-compress”}
Seção intitulada “Comprimir {id=“brotli-compress”}”-- Melhor para assets estaticos e conteudo de textolocal compressed = compress.brotli.encode(html_content, {level = 11})
-- Cachear assets comprimidoscache:set("static:" .. hash, compressed)
-- Compressao moderada para respostas de APIlocal compressed = compress.brotli.encode(json_data, {level = 4})| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados para comprimir |
options | table? | Opções de codificação opcionais |
Opções {id=“brotli-compress-options”}
Seção intitulada “Opções {id=“brotli-compress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
level | integer | Nivel de compressao 0-11 (padrão: 6) |
Retorna: string, error
Descomprimir {id=“brotli-decompress”}
Seção intitulada “Descomprimir {id=“brotli-decompress”}”local decompressed, err = compress.brotli.decode(compressed_data)if err then return nil, errend
-- Com limite de tamanholocal decompressed = compress.brotli.decode(data, {max_size = 50 * 1024 * 1024})| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados comprimidos Brotli |
options | table? | Opções de decodificação opcionais |
Opções {id=“brotli-decompress-options”}
Seção intitulada “Opções {id=“brotli-decompress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
max_size | integer | Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB) |
Retorna: string, error
Zstandard
Seção intitulada “Zstandard”Compressao rapida com boas taxas (RFC 8878).
Comprimir {id=“zstd-compress”}
Seção intitulada “Comprimir {id=“zstd-compress”}”-- Bom equilibrio de velocidade e taxalocal compressed = compress.zstd.encode(binary_data)
-- Compressao maior para arquivamentolocal archived = compress.zstd.encode(data, {level = 19})
-- Modo rapido para streaming em tempo reallocal fast = compress.zstd.encode(data, {level = 1})| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados para comprimir |
options | table? | Opções de codificação opcionais |
Opções {id=“zstd-compress-options”}
Seção intitulada “Opções {id=“zstd-compress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
level | integer | Nivel de compressao 1-22 (padrão: 3) |
dict | string? | Bytes do dicionário Zstd de train_dict (padrão: nenhum) |
Retorna: string, error
Descomprimir {id=“zstd-decompress”}
Seção intitulada “Descomprimir {id=“zstd-decompress”}”local decompressed, err = compress.zstd.decode(compressed_data)if err then return nil, errend| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados comprimidos Zstandard |
options | table? | Opções de decodificação opcionais |
Opções {id=“zstd-decompress-options”}
Seção intitulada “Opções {id=“zstd-decompress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
max_size | integer | Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB) |
dict | string? | Bytes do dicionário Zstd (deve corresponder ao dict usado para codificar) |
Retorna: string, error
Dicionários {id=“zstd-dictionaries”}
Seção intitulada “Dicionários {id=“zstd-dictionaries”}”Treine um dicionário a partir de dados de amostra para melhorar a compressão de muitos payloads pequenos e similares. Passe o dicionário treinado como a opção dict para encode/decode — o mesmo dicionário deve ser usado para ambos.
local dict, err = compress.zstd.train_dict(samples, { size = 112640 })local packed = compress.zstd.encode(data, { dict = dict })local original = compress.zstd.decode(packed, { dict = dict })train_dict(samples, options?)
Seção intitulada “train_dict(samples, options?)”| Parâmetro | Tipo | Descrição |
|---|---|---|
samples | string[] | Amostras de treinamento (pelo menos uma >= 8 bytes) |
options | table? | size (integer, bytes alvo do dict, 256-1048576, padrão 114688), id (integer, padrão 0), level (integer, 1-22) |
Retorna: string, error (os bytes do dicionário)
inspect_dict(dict)
Seção intitulada “inspect_dict(dict)”| Parâmetro | Tipo | Descrição |
|---|---|---|
dict | string | Bytes do dicionário |
Retorna: table, error — {id: integer, content_size: integer}
Deflate
Seção intitulada “Deflate”Compressao DEFLATE raw (RFC 1951). Usado internamente por outros formatos.
Comprimir {id=“deflate-compress”}
Seção intitulada “Comprimir {id=“deflate-compress”}”local compressed = compress.deflate.encode(data, {level = 6})| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados para comprimir |
options | table? | Opções de codificação opcionais |
Opções {id=“deflate-compress-options”}
Seção intitulada “Opções {id=“deflate-compress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
level | integer | Nivel de compressao 1-9 (padrão: 6) |
Retorna: string, error
Descomprimir {id=“deflate-decompress”}
Seção intitulada “Descomprimir {id=“deflate-decompress”}”local decompressed = compress.deflate.decode(compressed)| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados comprimidos DEFLATE |
options | table? | Opções de decodificação opcionais |
Opções {id=“deflate-decompress-options”}
Seção intitulada “Opções {id=“deflate-decompress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
max_size | integer | Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB) |
Retorna: string, error
DEFLATE com header e checksum (RFC 1950).
Comprimir {id=“zlib-compress”}
Seção intitulada “Comprimir {id=“zlib-compress”}”local compressed = compress.zlib.encode(data, {level = 6})| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados para comprimir |
options | table? | Opções de codificação opcionais |
Opções {id=“zlib-compress-options”}
Seção intitulada “Opções {id=“zlib-compress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
level | integer | Nivel de compressao 1-9 (padrão: 6) |
Retorna: string, error
Descomprimir {id=“zlib-decompress”}
Seção intitulada “Descomprimir {id=“zlib-decompress”}”local decompressed = compress.zlib.decode(compressed)| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados comprimidos Zlib |
options | table? | Opções de decodificação opcionais |
Opções {id=“zlib-decompress-options”}
Seção intitulada “Opções {id=“zlib-decompress-options”}”| Campo | Tipo | Descrição |
|---|---|---|
max_size | integer | Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB) |
Retorna: string, error
Escolhendo um Algoritmo
Seção intitulada “Escolhendo um Algoritmo”| Algoritmo | Melhor Para | Velocidade | Taxa | Faixa de Nivel |
|---|---|---|---|---|
| gzip | HTTP, ampla compatibilidade | Media | Boa | 1-9 |
| brotli | Assets estaticos, texto | Lenta | Melhor | 0-11 |
| zstd | Arquivos grandes, streaming | Rapida | Boa | 1-22 |
| deflate/zlib | Baixo nivel, protocolos especificos | Media | Boa | 1-9 |
-- Resposta HTTP baseada em Accept-Encodinglocal accept = req:header("Accept-Encoding") or ""local body = json.encode(response_data)
if accept:find("br") then res:set_header("Content-Encoding", "br") res:write(compress.brotli.encode(body))elseif accept:find("gzip") then res:set_header("Content-Encoding", "gzip") res:write(compress.gzip.encode(body))else res:write(body)end| Condição | Tipo | Retentável |
|---|---|---|
| Entrada vazia | errors.INVALID | não |
| Nivel fora da faixa | errors.INVALID | não |
| Dados comprimidos inválidos | errors.INVALID | não |
| Tamanho descomprimido excede limite | errors.INTERNAL | não |
Veja Error Handling para trabalhar com erros.