织梦如何开启gzip压缩提速
Gzip 压缩能把 HTML、CSS、JS 等文本资源体积压缩到原来的 1/4 到 1/3,对织梦这种页面文本量大的站点,提速效果立竿见影。百度也把页面加载速度纳入排名因素,开启 Gzip 是织梦站点优化的必做项。本文说明 Nginx、Apache、PHP 三种环境下的开启方法。
一、为什么要开 Gzip
未压缩时,一个含图文列表的织梦首页 HTML 可能有 80KB,开启 Gzip 后压缩到 18KB 左右,传输时间减少 70% 以上。对移动端 4G 用户尤其明显。收益:
- 页面首屏加载快 1-2 秒
- 服务器带宽占用降低
- 百度 PageSpeed 评分提升
- 移动端跳出率下降
二、确认 Gzip 是否已开启
在浏览器 F12 → Network → 点击任意 HTML/CSS/JS 请求 → 看 Response Headers:
Content-Encoding: gzip -- 已开启
(无此项) -- 未开启
或用 curl 命令:
curl -I -H "Accept-Encoding: gzip" https://www.xxx.com/
# 返回里有这行说明已开启
Content-Encoding: gzip
也可以用在线工具(如 tool.chinaz.com/Gzips)检测。
三、Nginx 开启 Gzip
这是最常见的环境。在 nginx.conf 的 http 块或 server 块里加:
gzip on;
gzip_min_length 1k; # 小于1KB不压缩
gzip_comp_level 6; # 压缩级别1-9,6是性价比最高的
gzip_types text/plain text/css text/javascript
application/javascript application/x-javascript
application/json application/xml
image/svg+xml;
gzip_vary on; # 加 Vary: Accept-Encoding 头
gzip_proxied any; # 代理请求也压缩
gzip_disable "MSIE [1-6]\."; # IE6 不支持 gzip
配置完 nginx -s reload 生效。
参数说明
gzip_comp_level—— 1 最快压缩比低,9 最慢压缩比高,6 是平衡点gzip_min_length—— 太小的文件压缩后反而更大,建议 1k 起步gzip_types—— 默认只压缩 text/html,要手动加 CSS/JS/XML 等gzip_vary on—— 让 CDN 能识别压缩响应
四、Apache 开启 Gzip
方式一:mod_deflate(推荐)
在 .htaccess 或 httpd.conf 加:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain
AddOutputFilterByType DEFLATE text/css text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
# 压缩级别
DeflateCompressionLevel 6
# 兼容旧浏览器
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
方式二:mod_gzip(老版本 Apache)
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html|txt|css|js|php|xml)$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
</IfModule>
五、PHP 层开启 Gzip
如果 Web 服务器配置不了,或只想压缩 PHP 输出的 HTML,可在 PHP 层开启。
方式一:php.ini
zlib.output_compression=On
zlib.output_compression_level=6
改完重启 PHP-FPM。这是全局生效,所有 PHP 输出都会被压缩。
方式二:代码层(织梦 index.php 顶部)
if(extension_loaded('zlib') && !headers_sent()){
ob_start('ob_gzhandler');
}
放在织梦入口文件 index.php 的最开头,只对动态页面生效。
方式三:模板里加 PHP
<?php
if(!headers_sent() && extension_loaded('zlib')){
ob_start('ob_gzhandler');
}
?>
放在公共头部 head.htm 顶部。但这种方式不推荐,因为静态生成的页面不会走 PHP。
六、织梦静态页的 Gzip 处理
织梦是静态生成机制,生成的 .html 文件默认不会被 PHP 的 ob_gzhandler 压缩。要让静态页也压缩,必须用 Web 服务器层(Nginx/Apache)的 Gzip。这是最推荐的方式。
如果用 PHP 处理静态页,需在 nginx 把 .html 也转发给 PHP:
location ~ \.html$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
七、Gzip 与 Brotli 对比
Brotli 是 Google 推出的新压缩算法,压缩率比 Gzip 高 15-20%,但需要 HTTPS 和现代浏览器。Nginx 开启 Brotli:
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css text/javascript
application/javascript application/json
application/xml image/svg+xml;
建议 Gzip 和 Brotli 同时开启,现代浏览器走 Brotli,老浏览器走 Gzip,兼容性与性能兼得。
八、压缩效果验证
用 curl 看压缩前后体积对比:
# 不压缩
curl -s https://www.xxx.com/ | wc -c
# 输出:82034(约 80KB)
# 压缩
curl -s -H "Accept-Encoding: gzip" https://www.xxx.com/ | wc -c
# 输出:18432(约 18KB)
压缩率=(82034 - 18432) / 82034 ≈ 77.5%,效果显著。
九、不该压缩的资源
- 图片(jpg/png/gif/webp)—— 已是压缩格式,再压缩无效甚至变大
- 视频/音频 —— 同上
- PDF —— 已压缩
- woff2 字体 —— 已压缩
- 小于 1KB 的文件 —— 压缩头开销大于压缩收益
Nginx 的 gzip_types 不要加这些类型。
十、注意事项
- Gzip 会增加服务器 CPU 开销,高并发站点注意监控 CPU
gzip_comp_level不要设成 9,性能损失大但压缩率提升很小- CDN 上要同步开启 Gzip,否则源站压缩了 CDN 又解压就白搭
- 开启后用 PageSpeed Insights 检测,确认“启用压缩”项通过
- 动态生成的页面(如搜索结果)也要测一下是否压缩
- 老 IE(IE6)对 Gzip 支持有 bug,用
gzip_disable排除
Gzip 是织梦站点性价比最高的优化项,配置一次长期受益。建议上线后用 Lighthouse 跑一遍性能检测,把 Gzip、缓存、图片优化几项都打绿,整站性能评分上去后,用户留存和搜索引擎排名都会有正向反馈。配合 Brotli 和 HTTP/2,性能还能再上一个台阶。