本文约 2,713 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
很多站长做速度优化时,把精力全放在缓存和服务器上,却忽略了最直观的一个大头——图片。图片通常占据一个页面 60% 以上的体积。相机拍的原图一张五六兆,手机截图随手就是两三兆,直接上传到 WordPress,首页再摆上七八张,访客光下载图片就要十几秒。更可惜的是,很多人根本不知道图片可以换成 WebP 格式,同样画质下体积能比 JPEG 小三四成。图片没压缩、没换格式、没懒加载,是拖慢 WordPress 最普遍也最容易解决的问题。好消息是,这件事基本可以靠插件自动化完成,本篇带你从压缩、转换、懒加载到响应式一层层处理。
故障原因分析
- 上传前不做压缩。WordPress 上传时只按你的设置生成几档缩略图,并不会自动优化原图体积,原图多大就存多大、前台用多大就传多大。
- 一直用 JPEG/PNG。JPEG 对照片尚可但体积偏大,PNG 适合透明图但对照片极不划算,而 WebP 在画质相当的前提下体积小得多,还有 AVIF 更新更省但要浏览器和兼容性评估。
- 上传了超大尺寸却按原尺寸显示。一张 4000 像素宽的原图,前台却只显示 800 像素宽,多出来的像素白下载。
- 没有懒加载。首屏根本没看到的图片也在页面一打开就全部下载,浪费带宽也拖慢首屏。
- 缺少响应式图片。没有根据访客屏幕宽度返回合适尺寸,手机被迫下载桌面版的大图。
分步解决方案
第一步:看看图片到底有多大
用 F12 的 Network 面板,按 Size 排序,一眼就能看出哪几张图是大头。也可以用 PageSpeed Insights,它会列出「适当调整图片大小」「以现代格式提供图片」「推迟加载屏幕外图片」等具体建议和可节省的 KB 数,先量化再动手。
第二步:用插件批量压缩已有图片
推荐 ShortPixel 或 Smush、Imagify。ShortPixel 压缩质量高、支持批量优化已有媒体库;Smush 免费额度够小站用。安装激活后进入其后台面板,选择压缩级别(一般选「有损」Lose optimization,画质肉眼几乎无损但体积降幅最大),然后点「Bulk Optimize」对历史图片批量处理。几万张图会跑较久,可以分批或让它后台跑完,别中途刷新页面。
第三步:开启自动 WebP 转换
同样在 ShortPixel 或 Imagify 设置里,打开「Convert to WebP」(或新版本里的 Next-Gen Images 选项)。开启后插件会在压缩时额外生成一份 .webp 文件,并用规则在页面里把图片引用替换成 WebP 版本,浏览器不支持时自动回退到原格式。LiteSpeed Cache 用户可以在它的「图片优化」里直接开 WebP,服务器是 LiteSpeed 时效果最好。也可以单独用 WebP Express 插件负责转换。
第四步:开启懒加载
WordPress 5.5 以后原生支持懒加载,会自动给图片加 loading="lazy",但有些主题或旧版本需要插件补上。WP Rocket 的「LazyLoad」、Autoptimize、LiteSpeed Cache 都带此功能。注意首屏图片不要懒加载,否则反而拖慢首屏,WP Rocket 有「Exclude images above the fold」的排除项可填首屏图片的 class。
第五步:上传前先处理原图
在源头解决:上传前用图片软件把宽度压到实际显示需求以内(一般内容区 1200px 左右足够,全宽背景图 1920px),导出时选 JPEG 质量 75 到 85 或直接导出 WebP。WordPress 后台「设置 → 媒体」里可以把「最大上传尺寸」设小,逼自己上传前处理。
第六步:启用响应式图片 srcset
WordPress 默认会用 srcset 输出多尺寸图片,让浏览器按需选择,确认主题没有禁用。检查前台图片标签是否带 srcset:
<!-- 期望看到的图片标签结构 -->
<img src="photo-1024.jpg"
srcset="photo-300.jpg 300w, photo-768.jpg 768w, photo-1024.jpg 1024w"
sizes="(max-width: 768px) 100vw, 1024px"
loading="lazy" width="1024" height="683" alt="" />
如果只有单个 src,说明 srcset 被过滤掉了,排查主题或插件里是否用了 wp_calculate_image_srcset 相关的过滤。
第七步:为图片加宽度高度和 CDN
给 img 标签补上 width 和 height,浏览器能提前预留位置,减少布局跳动(CLS)。再把图片交给 CDN 分发,国内用七牛云、又拍云开启图片处理参数,可以在线裁剪压缩,进一步减小体积。
常见踩坑点
- 压缩级别开成「无损」还指望体积大降。无损压缩对 JPEG 降幅有限,想让体积砍半得选有损且把质量设在 75~85,肉眼几乎看不出差别。
- 开了 WebP 却不生效,图片 URL 还是
.jpg。检查是主题硬编码了图片路径,还是服务器重写规则没配上,ShortPixel 会提供一份.htaccess重写规则,按提示加上即可。
- 全站图片都懒加载,包括首屏大图。首屏的 banner 图被懒加载后会延迟出现,体验更差,务必把首屏图片排除在懒加载之外。
- 批量压缩时关掉浏览器。多数插件压缩是服务器端后台任务,中途关页面一般不影响,但如果插件走的是浏览器端请求,关掉就中断了,看清插件说明再操作。
- 忘记清理压缩前的原图备份。ShortPixel 默认会保留原图备份(占用双倍空间),确认压缩效果满意后,在设置里关闭备份并清理,否则磁盘会翻倍膨胀。
总结
图片未压缩、未使用 WebP,是 WordPress 加载慢里最容易忽视又最容易解决的一环,因为它不用改代码、不用换服务器,装上 ShortPixel 或 Imagify 开个自动转换就行。整条链路是:上传前先把原图尺寸和质量处理到位,用插件对历史图片批量压缩并自动生成 WebP,再开启懒加载并把首屏图片排除,最后确认响应式 srcset 和 width/height 正常输出,有条件再叠加 CDN 图片处理。把这几步做完,页面总下载体积往往能减少一半以上,首屏肉眼可见地变快,对移动端访客的流量和耐心都是实打实的照顾。
