网站压缩完全指南:Gzip与Brotli对比及设置方法
网站压缩是改进页面加载速度和用户体验的基本技术之一。通过在将HTML、CSS、JavaScript和基于文本的文件发送到访问者的浏览器之前减小其大小,可以减少加载时间、节省带宽并提升整个站点的性能。Gzip和Brotli是当今最受欢迎的两种压缩方法,各自具有不同的优势和最优应用场景。
目录
网站压缩为何重要
网站访问者来自不同地点并使用不同设备,有些人享受快速连接,有些人使用较慢的网络。对于文本内容,压缩可以将文件大小减少50-80%,这对移动用户和带宽有限的用户至关重要。此外,Google等搜索引擎将页面速度视为排名因素,使压缩对SEO性能也很重要。
- 可将HTML、CSS和JavaScript文件大小减少50-80%
- 加快页面加载速度、降低访问者跳出率
- 节省服务器带宽、降低托管成本
- 改进核心网页指标,特别是最大内容绘制(LCP)
- 通过提升性能正向影响搜索引擎排名
- 增强用户体验,尤其是对移动设备和慢速网络用户
Gzip压缩详解
Gzip是一种广泛使用的压缩标准(LZ77算法),已使用超过25年,几乎所有现代网络服务器和浏览器都支持它。当服务器发送Gzip压缩的内容时,浏览器会在显示给访问者之前自动解压缩。这种易用性使Gzip成为许多网站的默认压缩选择。Gzip压缩级别范围为1-9,其中第6级是推荐的默认级别,因为它在文件大小减少和CPU使用之间提供了很好的平衡。
- 受几乎99%的现代浏览器及较旧版本支持
- 服务器端实现和配置简单直接
- 对文本、HTML、CSS和JavaScript文件的大小可减少50-60%
- 压缩速度快,在第6级时额外CPU占用最少
- 与纯文本文件和结构化数据格式配合效果好
- 相比Brotli压缩的处理开销更低
Brotli压缩详解
Brotli是由Google开发的较新压缩算法,旨在实现比Gzip更高的效率。对于典型网站内容,Brotli通常比Gzip产生的文件小15-20%,是更高效的压缩方法。然而,Brotli在压缩过程中需要更多计算资源,会增加服务器的CPU占用。此外,对于较旧浏览器的支持有限——Internet Explorer不支持Brotli,但Chrome、Firefox、Safari和Edge等现代浏览器完全支持。
- 对于典型网页内容可实现比Gzip好15-20%的压缩效果
- 完全受所有现代浏览器支持:Chrome、Firefox、Safari和Edge
- 压缩过程需要更多CPU资源,可能影响高负载服务器
- 较旧的Internet Explorer版本不支持,但现代浏览器已普遍
- 适合静态预压缩和离线压缩场景
- 优越的压缩质量使其成为现代网络应用的理想选择
Gzip与Brotli:主要差异及应用场景
Gzip和Brotli之间的主要差异很直白:Gzip更老、压缩速度快、占用最少CPU且几乎获得所有浏览器支持,使其成为资源受限服务器的理想选择。Brotli较新、压缩速度慢、占用更多CPU,但产生明显更好的压缩效果。最佳实践是同时支持两者:通过内容协商为现代浏览器提供Brotli,为较旧浏览器回退到Gzip,确保为所有访问者提供最优交付。
- Gzip:较旧、压缩速度快、CPU占用低、浏览器支持率几乎100%
- Brotli:较新、压缩速度慢、CPU占用高、压缩效率高15-20%
- 为现代浏览器提供Brotli,为最大兼容性提供Gzip作为备选
- Brotli对于带宽受限的移动用户和慢速网络更优
- Gzip更适合已处于CPU压力下的高负载服务器
- 使用内容协商(Vary: Accept-Encoding)同时支持两种方法
如何启用压缩:Apache和Nginx配置
为Apache和Nginx启用Gzip和Brotli都很直接。对于Apache,通过.htaccess或服务器配置添加mod_deflate设置以启用指定级别的压缩。对于Nginx,修改nginx.conf文件以启用gzip和brotli模块。一旦获得配置文件访问权限,两种方法都很简单。cPanel或Plesk等控制面板通常提供一键选项来自动启用压缩。
- Apache:通过.htaccess启用mod_deflate并设置压缩级别
- Nginx:编辑nginx.conf以启用gzip和brotli压缩模块
- 指定要压缩的MIME类型(text/html、text/css、application/javascript)
- 将Gzip压缩级别设置为6,Brotli设置为11(推荐默认值)
- 更改配置后验证压缩是否正常工作
- 如果服务器CPU已处于高负载,使用不同的设置
哪些文件类型应压缩及避免压缩
不是所有文件都从压缩中受益。已压缩文件如JPEG、PNG、视频和ZIP存档收益甚微,因为它们已使用优越的压缩算法。尝试压缩已压缩的文件可能会增加文件大小或无效。重点压缩文本文件:HTML、CSS、JavaScript、JSON、XML和纯文本。应排除小于1KB的文件,因为CPU开销超过带宽节省。
- 压缩:HTML、CSS、JavaScript、JSON、XML、SVG、纯文本文件
- 不要压缩:JPEG、PNG、WebP、GIF、MP4、MP3、已压缩PDF
- 跳过小于1KB的文件,因为CPU开销超过收益
- 压缩WOFF2和大字体文件以获得更好的交付
- 不要压缩WebP文件,因为它们已针对网络优化
- 压缩SVG文件,因为它们是XML文本,通常可减少50%
测试压缩:浏览器DevTools和在线工具
测试压缩是否活跃很直接。打开Chrome DevTools(F12或Ctrl+Shift+I),进入Network标签页,检查HTML、CSS和JavaScript文件的Type列——应显示"gzip"或"br"(Brotli)。如果显示"text/html"或"text/css"且无编码,说明压缩未激活。或者,检查Response Headers中的"Content-Encoding"头,应显示"gzip"或"br"。也可使用GTmetrix或WebPageTest等在线工具来分析整个网站的压缩情况。
- 打开Chrome DevTools:F12 > Network标签页,检查HTML、CSS、JavaScript的文件类型
- 检查Response Headers:Content-Encoding应显示gzip或br
- 若不存在Content-Encoding头,表示压缩未启用
- 使用GTmetrix或WebPageTest等在线分析工具获取详细报告
- 比较已转移文件大小与原始大小以查看压缩比
- 在不同浏览器中测试以验证所有访问者的兼容性
压缩对核心网页指标和页面速度的影响
压缩直接改进Google的核心网页指标。最大内容绘制(LCP)通过减少HTML和CSS下载时间而改进。首次输入延迟(FID)通过减少JavaScript文件大小而改进。累积布局偏移(CLS)可能通过较小的CSS文件间接改进。使LCP低于2.5秒(绿色)和FID低于100毫秒(绿色)需要多项优化,压缩是最有影响的之一。结合图像优化和删除不必要代码,压缩对核心网页指标的成功至关重要。
- 压缩减少HTML、CSS和JavaScript文件的下载时间
- 通过更快的内容交付改进最大内容绘制(LCP)
- 通过较小的JavaScript负载改进首次输入延迟(FID)
- 通过较小的CSS文件间接改进累积布局偏移(CLS)
- 减少网络往返次数,对慢速连接至关重要
- 压缩是核心网页指标优化的十大因素之一
常见压缩设置错误及避免方法
常见错误包括压缩已压缩的文件如图像和视频,浪费CPU资源却无收益。另一个错误是将压缩级别设置过高,相信最大压缩总有帮助,但实际上第6级(Gzip)和第11级(Brotli)是最优的——更高级别浪费CPU而额外节省文件大小微乎其微。忘记发送Content-Encoding头是关键错误;没有它,浏览器可能无法正确解压缩文件。最后,不要忽视CDN设置——确保CDN也配置为正确支持和交付压缩内容。
- 不要压缩已压缩文件(图像、视频、PDF)以避免浪费CPU
- 不要将压缩级别设置为最大;Gzip第6级和Brotli第11级是最优的
- 确保发送Content-Encoding头;否则浏览器无法解压缩文件
- 在完整服务器负载下测试;最大压缩可能过度增加响应时间
- 更新CDN设置以在所有边界支持一致的压缩
- 监控服务器响应时间以避免压缩成为性能瓶颈
常见问题
压缩对图像和视频有效吗?
不,Gzip和Brotli压缩是为文本文件设计的。尝试压缩已压缩的图像(JPEG、PNG)或视频(MP4)会增加或浪费资源,因为这些格式已使用专门的压缩算法。相反,通过选择合适的格式(照片用WebP、图形用PNG)或在图像创建过程中应用有损压缩来优化图像。
Brotli总是比Gzip更好吗?
并非总是。虽然Brotli提供更好的压缩(文件小15-20%),但需要显著更多的CPU。如果服务器已处于高CPU负载下,Gzip可能是更好的选择。理想解决方案是同时支持两者,让浏览器根据其能力选择——现代浏览器将请求Brotli,而较旧浏览器回退到Gzip。
启用压缩会增加服务器CPU使用吗?
是的,压缩需要额外的CPU资源,但当Gzip设置为第6级时,开销相对于带宽节省来说很小。Gzip第6级是很好的平衡。如果服务器处于高CPU负载,降低到第4-5级,仍然可以实现45-50%的文件大小减少,且CPU占用更低。
我如何检查我的网站是否已使用压缩?
打开Chrome DevTools(F12),进入Network标签页,重新加载页面。查看HTML、CSS和JavaScript文件——如果Type列显示"gzip"或"br"(Brotli),说明压缩活跃。或者,检查Response Headers中的"Content-Encoding: gzip"或"Content-Encoding: br"。WebPageTest等在线工具也提供压缩状态报告。
CDN是否自动处理压缩?
大多数CDN自动处理压缩,但要验证CDN设置以确保其已启用。某些CDN可能仅支持Gzip,不支持Brotli,或特定文件类型的压缩可能被禁用。检查CDN的压缩设置并使用真实浏览器测试,以确认访问者接收正确压缩的内容。