为什么 LZMA-JS 压缩的字符串大小约为比压缩前大 10 倍
Why size of a string compressed by LZMA-JS is approx. 10x bigger then before the compression
我正在尝试找到一种方法来减小我发送到服务器的 BASE64 编码图像的大小。我发现 question 其中 LZMA 是建议的解决方案。但是,当我检查服务器上的请求大小时,我发现未压缩版本的大小小了约 10 倍。我错过了一步吗?我看到压缩的结果是 Byte Array
我尝试使用 .toString('utf8')
方法但它似乎只是加入数组。
/* LZMA COMPRESS / DECOMPRESS */
.factory('ooLZMA', ['CONFIG', function (CONFIG) {
return {
compress: function (string) {
return LZMA.compress(string, CONFIG.stringCompression);
},
decompress: function () {
return LZMA.decompress(string);
}
}
}])
在服务器上:
console.log('size', req.headers['content-length'] / 1048576, 'comp', req.body.compressed);
//"compressed"
size 0.1276998519897461 comp true
//raw BASE64
size 0.01657390594482422 comp false
这是格式转换造成的。
如果您发送 BASE64 编码,它已经是一个字符串,并且按原样发送到服务器。
而是在实际请求之前将数组转换为字符串。
如果您的数据不能压缩太多,压缩后的数据将具有相似的大小,但字符串转换操作会增加它,因为每个数字平均长度为 10/12 个字符。
如果您正在使用 jquery,我认为这是 post 数据的正确方法。
通过设置实际内容类型 'application/octet-stream' 并避免 preprocessing/convertion.
我正在尝试找到一种方法来减小我发送到服务器的 BASE64 编码图像的大小。我发现 question 其中 LZMA 是建议的解决方案。但是,当我检查服务器上的请求大小时,我发现未压缩版本的大小小了约 10 倍。我错过了一步吗?我看到压缩的结果是 Byte Array
我尝试使用 .toString('utf8')
方法但它似乎只是加入数组。
/* LZMA COMPRESS / DECOMPRESS */
.factory('ooLZMA', ['CONFIG', function (CONFIG) {
return {
compress: function (string) {
return LZMA.compress(string, CONFIG.stringCompression);
},
decompress: function () {
return LZMA.decompress(string);
}
}
}])
在服务器上:
console.log('size', req.headers['content-length'] / 1048576, 'comp', req.body.compressed);
//"compressed"
size 0.1276998519897461 comp true
//raw BASE64
size 0.01657390594482422 comp false
这是格式转换造成的。 如果您发送 BASE64 编码,它已经是一个字符串,并且按原样发送到服务器。 而是在实际请求之前将数组转换为字符串。 如果您的数据不能压缩太多,压缩后的数据将具有相似的大小,但字符串转换操作会增加它,因为每个数字平均长度为 10/12 个字符。
如果您正在使用 jquery,我认为这是 post 数据的正确方法。
通过设置实际内容类型 'application/octet-stream' 并避免 preprocessing/convertion.