性能优化实战

织梦如何开启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;
}
这种方式会增加 PHP 负载,不如直接用 Nginx 的 gzip 压缩静态文件高效。

七、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,性能还能再上一个台阶。