数据从服务器传输到客户端,需要传输时间,文件越大传输时间就越长,为了减少传输时间,我们一般把数据压缩后在传给客户端。
apache支持两种压缩:
- deflate
- gzip
使用mod_deflate实现数据压缩
1)开启模块
LoadModule deflate_module modules/mod_deflate.so
2)调用模块
# 启用压缩
SetOutputFilter DEFLATE
# 压缩等级 4 1-9,数字越大压缩的越好,也越占用CPU时间
DeflateCompressionLevel 4
# 压缩类型 html、xml、php、css、js
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
AddOutputFilter DEFLATE js css
# 设置对应的最小文件大小进行压缩(可选) apache2.4下不存在这个变量
#DeflateMinFileSize 1024
#浏览器匹配 IE1-6的不压缩
BrowserMatch \bMSIE\s[1-6] dont-vary
#设置不压缩的文件,注意图片本身就是压缩过的,所以不需要再压缩
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
AddOutputFilterByType 指令
根据 MIME 类型添加输出过滤器,指定了哪些类型的文件需要使用指定的过滤器进行处理。例如,对于特定类型的文件,比如文本文件或特定的脚本文件,你可以使用 AddOutputFilterByType
指定对应的过滤器。
AddOutputFilter 指令
通常用于按照文件后缀名来添加输出过滤器。它允许你指定带有特定文件后缀的文件将会被哪些过滤器处理。
MIME 类型说明
- text/html(HTML)
- text/plain(纯文本)
- text/xml(XML)
- application/x-javascript(JavaScript)
- application/x-httpd-php(PHP脚本)
最佳实践和优化建议
- 仅压缩文本文件:
- 避免对已经压缩过的文件进行再次压缩,例如图片、音频和视频文件。设置合适的MIME类型来仅压缩文本类型文件。
- 压缩级别选择:
- 选择合适的压缩级别。一般来说,级别 6 到 9 之间能够提供很好的压缩效果。较高级别会消耗更多的CPU资源。
- 限制压缩文件大小:
- 对于非常小的文件,压缩可能不会带来明显的性能提升。设置一个合适的最小文件大小来避免对小文件进行压缩。
- 监控和调整:
- 监控服务器性能,并根据实际情况调整压缩配置。观察CPU使用率和响应时间,确保压缩不会造成服务器负担过重。
测试效果
启用压缩再次通过浏览器访问该页面,通过开发者工具查看页面大小,如果明显变小了则说明压缩成功。也可以从响应头中看出多了压缩字段。