为什么不建议你对图片开启Gzip压缩?

前端专家理想哥解析,图片Gzip压缩体积不变原因:主流图片格式如JPG、PNG已内置压缩,二次Gzip可能导致体积增大。LZ77与Huffman编码原理也作了介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈喽,大家好呀,我是前端理想哥,今天理想哥想和大家聊一聊关于图片不开启Gzip压缩的原因

很多朋友可能会发现,对于JS、CSS、HTML这些文件来说,当你开启Gzip压缩之后往往都会压缩到原有体积的三分之一,但是呢,对于图片开启Gzip压缩之后,体积基本没有啥变化,这是为什么呢?很多文章在讲这个问题的时候只会讲结果,今天理想哥想从Gzip压缩的原理层面把这个问题给大家讲透

要讲明白这个问题,我们得需要先来了解一下Gzip压缩的底层算法。

Gzip是使用deflate算法进行压缩的,deflate算法会先使用LZ77算法对文件压缩,然后会使用Huffman编码再次压缩,最终会得到压缩后的文件,重复度越高的文件可压缩的空间就会越大。

那么LZ77算法Huffman编码是什么?在这里理想哥只简单介绍一下这两种算法的大致原理,感兴趣的同学可以下去之后再详细了解一下。

LZ77算法大家可以理解为正则中的贪婪算法,原理是什么呢?

如果文件中有两块相同的内容,我们就可以使用两块相同内容之间的距离和长度来替换后一块内容,这样文件的整个体积就可以变小了。

举个例子,比如我们现在有一段字符串

ABCDEFABCD

大家可以看到这段字符串中ABCD是重复的,那么使用LZ77算法我们就可以把这段字符串表达为

ABCDEF(7,4) 

7是代表从第7位开始重复,4是代表重复ABCD4个字符,这样就可以减少总的字符数了。

那么Huffman编码是什么呢?Huffman编码是使用一种特别的方法为信号源中的每个符号设定一个二进制码,出现频率更大的符号会获得更短的比特,出现频率更小的符号会被分配更长的比特,以此来提高数据的压缩率,提高传输效率。

比如,通过Huffman编码我们就可以将ABAABACD这个字符串使用二进制编码 01000100110111来表示,字符的长度会得到明显的缩短。

说完这两种算法,我们再回到原题为什么图片不开启Gzip压缩呢?

原因是,我们常见的主流图片格式Jpg、Png、Gif等,其实已经用过压缩算法了,当你开启Gzip压缩再次进行压缩非但不会减少体积还可能因为增加了文件头尾信息部分导致总体积反而变大了。最终会导致增加了网站响应时间和浪费CPU计算,而且当大家有兴趣去了解Png图片的压缩算法时,你会发现Png也是使用的deflate算法,所以没有必要用Gzip的deflate算法进行再次压缩。

以上就是理想哥关于这个问题的回答,如果大家对文章感兴趣,欢迎给理想哥一个一键关注,万分感谢大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值