搜索全站
性能优化 10 分钟阅读

ShortPixel/Imagify/Smush 图片压缩插件对比:压缩率与配额

同样是压缩图片,ShortPixel、Imagify、Smush 的计费方式和压缩等级完全不同。本文用实测思路对比三者的压缩率、免费配额、批量处理和 WebP 支持,帮你按站点规模选对插件。

U
UFO_PF 2016-11-28 · 阅读 10 分钟
Sh 性能优化
阅读提示
本文约 3,617 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:装了插件却没变小,问题往往不在插件

很多站长的操作是这样的:后台装一个图片压缩插件,点一下「Bulk Optimize」,看到进度条跑完就以为万事大吉。过几个月打开媒体库一看,单张配图还是 1.8MB,PageSpeed Insights 依旧提示「使用下一代图片格式」。

这里面有两个常见的认知偏差。第一,压缩插件的「一次批量」只处理当时已存在的图片,之后新上传的图片要走「上传时自动优化」开关,而这个开关在不少插件里默认是不开的。第二,压缩插件主要负责「减掉元数据、做有损重编码」,它不会替你改变图片本身的分辨率。一张 4000×3000 的相机原图,压缩完可能仍有 800KB——真正该做的是在上传前把长边缩到 1600px 以内。所以选型之前,先明确插件能替你解决的是哪一段:编码优化、格式转换、尺寸适配,还是三者都要。

原理分析:三款插件的计费口径不一样

三款插件底层都调用了 cwebp、jpegoptim/optipng、pngquant 之类的编码器(云端方案在服务端完成),差别主要在免费额度怎么算和压缩等级怎么分。

对比维度 ShortPixel Imagify Smush
开发方 ShortPixel WP Media WPMU DEV
免费额度口径 按图片张数(含缩略图),常见为每月 100 credits 按流量,常见为每月 25MB(约 250 张) 不限制张数,但单图超过 5MB 无法压缩
压缩等级 Lossy / Glossy / Lossless Normal / Aggressive / Ultra 免费版为无损,有损属 Pro 功能
批量处理 有,后台排队执行 有,按批次消耗额度 有,每次批量上限约 50 张
WebP 支持生成 WebP / AVIF 支持,提供 .htaccess / nginx 改写规则 本地 WebP 多与 Pro / CDN 能力绑定
原图备份 可选择保留原图便于回滚 提供原图备份选项 以实际版本为准

这张表最该注意的是「按张数」和「按流量」的区别。图片站、摄影博客这类「张数多但单图不大」的站点,Imagify 的 25MB 流量计法反而更耐用;而产品详情页、 banner 大图这类「单图大但数量少」的站点,ShortPixel 按张计费更划算。Smush 不限制张数,对图片数量极大的老站很友好,但 5MB 的天花板意味着你依然得先解决「超大原图」问题。

具体价格档位会随官方活动变动,选型时以官网当前政策为准,不要照抄任何一篇教程里的数字。

保姆级实操:用数据而不是感觉来选型

步骤1:先摸清家底。 在动手之前,先统计媒体库里图片的数量和体积分布,避免插件跑了一半才发现额度不够。

# 统计 uploads 目录里大于 500KB 的图片数量与总体积
find wp-content/uploads -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) -size +500k \
  | wc -l
find wp-content/uploads -type f \( -iname '*.jpg' -o -iname '*.png' \) -printf '%s\n' \
  | awk '{s+=$1} END {printf "总字节 %d, 约 %.2f MB\n", s, s/1048576}'

步骤2:校准尺寸再谈压缩。 确认主题的缩略图尺寸是否合理,然后重生成缺失的缩略图,别让浏览器去下载 2560px 的原图。

# 只生成缺失的缩略图尺寸,已存在的不重复处理
wp media regenerate --only-missing --yes
# 查看当前注册的图片尺寸
wp eval 'print_r( wp_get_registered_image_subsizes() );'

步骤3:开启上传时自动优化。 这点最容易被漏掉。三款插件的设置页里都有类似「Optimize images on upload / Automatically optimize new uploads」的开关,必须打开,否则历史图片压缩完,新图片依然原样入库。

步骤4:先用小批量试压缩率。 不要一上来就跑全站。挑 20 张有代表性的图(产品图、截图、照片各几张)单独压缩,记录压缩前后的体积。有损档位建议从中间档(Glossy / Normal)开始,肉眼几乎无损,压缩率却比无损高一大截。

步骤5:核对缩略图是否被一起处理。 用下面这段脚本把某个附件的各个尺寸实际落盘体积打出来,确认插件没有只压缩原图、漏掉缩略图。

<?php
// 临时脚本:查看某附件各尺寸的落盘体积(用完即删)
$id   = 1234; // 替换成真实附件 ID
$meta = wp_get_attachment_metadata( $id );
$base = dirname( get_attached_file( $id ) );
printf( "原图:%s\n", size_format( filesize( get_attached_file( $id ) ) ) );
if ( ! empty( $meta['sizes'] ) ) {
    foreach ( $meta['sizes'] as $name => $info ) {
        $path = $base . '/' . $info['file'];
        printf( "%-20s %-16s %s\n", $name, $info['width'] . 'x' . $info['height'],
            file_exists( $path ) ? size_format( filesize( $path ) ) : '文件缺失' );
    }
}

步骤6:确认额度消耗与回退方案。 压缩前确认插件是否保留原图(ShortPixel、Imagify 均提供相关选项)。有原图备份,才能在客户说「图变糊了」的时候一键回滚。关于图片格式的进一步处理,可以参考用插件自动转 WebP 并兼容旧浏览器。

步骤7:把压缩纳入发布流程。 在编辑规范里写清楚「上传前长边不超过 2000px、优先使用 WebP 或压缩后的 JPG」,插件只做兜底,而不是替人擦屁股。

常见踩坑

  1. 批量压缩跑一半就停。多数是 PHP max_execution_time 或内存上限被打满,表现为进度条卡在某一页不再动。把批次调小、在低峰时段跑,比盲目加大内存更稳。
  2. 压缩后图片变糊却不自知。Ultra / Aggressive 档位对含文字的截图非常不友好,锐利的文字边缘会出现振铃伪影。截图类图片建议用无损或中间档。
  3. 额度悄悄耗尽。ShortPixel 按张数计,缩略图也可能计入;媒体库里一次导入几百张图,额度可能瞬间归零,之后上传的图片就「静默不压缩」了——插件不会报错,只是不动。
  4. 原图和缩略图体积倒挂。手工改过 add_image_size() 后没有重新生成缩略图,浏览器 srcset 会挑到比原图还大的尺寸。
  5. 透明 PNG 被转成 JPEG。部分插件或主题在处理带透明通道的图片时会出现黑底,务必抽查几张 logo、图标类图片。
  6. 案例:某外贸站把 3000 多张产品图一次性批量压缩,ShortPixel 免费额度用完后插件进入「等待额度」状态,后续半年上传的图全是原图;更糟的是当时勾选了删除原图,想回滚也回不去。最后只能重新导出原始素材再压一遍。教训是:批量前先算额度,且不要在没有备份的情况下删除原图。
  7. CDN 缓存住了旧图。压缩完成后前台体积没变,多半是 CDN 或页面缓存没刷新,去 CDN 后台刷新图片目录缓存即可。
  8. 多插件叠加。同时启用两款压缩插件会出现重复排队、互相覆盖文件的情况,任何时刻只保留一个。

总结

选型可以用三句话定下来:图片多、单图小的资讯站,看 Imagify 的流量计法;图片少、单图大的产品站,看 ShortPixel 的按张计费;老站海量历史图片且预算为零,Smush 的「不限张数」最省心。无论选哪个,都要先做尺寸治理、再开自动优化、最后留好原图备份。压缩插件解决的是编码层面的浪费,它替代不了上传前的尺寸控制——这一点想明白,你就不会再为「压完还是大」而困惑。想进一步优化首屏表现,可以继续看图片懒加载插件的选型与原生 loading 属性与用插件实现图片 CDN 加速与自适应尺寸。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。