压缩速率追踪

2024-05-04 18:08
文章标签 压缩 追踪 速率

本文主要是介绍压缩速率追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flash Player 11.3添加了一个压缩和解压ByteArray的新方法:LZMA算法。这个算法很有用,因为和现存的zlibdeflate算法相比,LZMA通常能压缩到更小的程度。但这会导致压缩速度减少多少呢?今天这篇文章就是为了找出这个问题的答案。

 

首先,如果你感兴趣的话,可以很容易切换到LZMA。所有你需要做的就是将CompressionAlgorithm.LZMA传递给ByteArray.compress或ByteArray.uncompress。当然你还需要建立好Flash Player 11.3,并且保证你的用户至少在使用这个版本。

 

至于你将得到的额外压缩,这取决于你要压缩的数据,但大约比gzip要好50%,可以有效地减少下载时间!因此,在压缩速率这篇文章的测试应用程序的基础上,我们通过下面的测试程序来看看LZMAzlibDeflate性能上的区别:

 

 

package
{import flash.display.*;import flash.utils.*;import flash.text.*;public class CompressionSpeedFollowup extends Sprite{private var logger:TextField = new TextField();private function row(...cols): void{logger.appendText(cols.join(",") + "");}public function CompressionSpeedFollowup(){logger.autoSize = TextFieldAutoSize.LEFT;addChild(logger);row("Size","deflate (compress)","zlib (compress)","LZMA (compress)","deflate (uncompress)","zlib (uncompress)","LZMA (compress)");runTests("1 KB", 1024, 1024);runTests("1 MB", 1024*1024, 1);}private function runTests(label:String, size:int, reps:int): void{var beforeTime:int;var afterTime:int;var emptyTime:int;var deflateTimeCompress:int;var zlibTimeCompress:int;var lzmaTimeCompress:int;var deflateTimeUncompress:int;var zlibTimeUncompress:int;var lzmaTimeUncompress:int;var bytes:ByteArray = new ByteArray();var originalBytes:ByteArray = new ByteArray();var compressedBytes:ByteArray = new ByteArray();var i:int;var zlib:String = CompressionAlgorithm.ZLIB;var deflate:String = CompressionAlgorithm.DEFLATE;var lzma:String = CompressionAlgorithm.LZMA;fillBytes(originalBytes, size);// EmptybeforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);}afterTime = getTimer();emptyTime = afterTime - beforeTime;// CompressbeforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);bytes.compress(deflate);}afterTime = getTimer();deflateTimeCompress = afterTime - beforeTime - emptyTime;beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);bytes.compress(zlib);}afterTime = getTimer();zlibTimeCompress = afterTime - beforeTime - emptyTime;beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);bytes.compress(lzma);}afterTime = getTimer();lzmaTimeCompress = afterTime - beforeTime - emptyTime;// UncompresscopyBytes(originalBytes, compressedBytes);compressedBytes.compress(deflate);beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(compressedBytes, bytes);bytes.uncompress(deflate);}afterTime = getTimer();deflateTimeUncompress = afterTime - beforeTime - emptyTime;copyBytes(originalBytes, compressedBytes);compressedBytes.compress(zlib);beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(compressedBytes, bytes);bytes.uncompress(zlib);}afterTime = getTimer();zlibTimeUncompress = afterTime - beforeTime - emptyTime;copyBytes(originalBytes, compressedBytes);compressedBytes.compress(lzma);beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(compressedBytes, bytes);bytes.uncompress(lzma);}afterTime = getTimer();lzmaTimeUncompress = afterTime - beforeTime - emptyTime;row(label,deflateTimeCompress,zlibTimeCompress,lzmaTimeCompress,deflateTimeUncompress,zlibTimeUncompress,lzmaTimeUncompress);}private function fillBytes(bytes:ByteArray, size:int): void{bytes.length = 0;bytes.position = 0;for (var i:int; i < size; ++i){bytes.writeByte(Math.random()*256);}bytes.position = 0;}private function copyBytes(bytes:ByteArray, into:ByteArray): void{bytes.position = 0;into.position = 0;into.length = 0;into.writeBytes(bytes);bytes.position = 0;into.position = 0;}}
}

 

我是在以下环境中运行的测试应用程序:

 

· Flex SDK(MXMLC4.6.0.23201,在发布模式下编译(没有调试或冗长的堆栈跟踪)

· Flash Player 11.4.402.287

· 2.3 GHz的英特尔酷睿i7处理器

· Mac OS X 10.8.2

 

下面是我得到的结果:(最下面的LZMA标签改为LZMAuncompress)) 



 

正如图中所描述的,LZMA的压缩和解压速率要比zlibDeflate慢很多。大约压缩慢了28倍,解压慢了16倍,至少我使用的随机测试数据是这样。然而,与大多数编程任务一样,这里还是有个权衡的。如果你需要提高下载速度的话,你现在就可以使用LZMA压缩,但下载之后就要花费额外的处理能力来解压。这可能是你愿意做的一个权衡了,但你一定要注意上面的结果:你的CPU将遇到麻烦了!

这篇关于压缩速率追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959795

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c