使用Perfect Images插件优化WordPress图片:Retina、尺寸和CDN指南
教程
Perfect Images,以前叫 WP Retina 2x,不仅能自动处理 Retina(高分屏)图片,还能帮你控制图片尺寸、优化图片,并通过 CDN 加速。
优化你的图片尺寸
你知道 WordPress 里的“图片尺寸”是啥吗?这个概念很重要,如果你不了解,最好先看看这篇文章:WordPress 图片尺寸。
你的 WordPress、主题和其他插件都会注册一些图片尺寸。你媒体库里的每张图片,都会生成所有这些尺寸。这些尺寸平时是看不到的。好在 Perfect Images 不仅能让你看到这些尺寸,还能让你选择开启或关闭它们。在设置里,你会看到这个界面。

我的例子里,我用的是 TwentyTwenty 主题的 WordPress 网站。这个主题加了 post-thumbnail 和 twentytwenty-fullscreen 这两个尺寸。WordPress 自己加了其他所有尺寸,确实有点多(太多了)。
这些尺寸有啥用?
如果你看了我前面提到的文章,可能已经知道了。简单说,你网站上每张图片都会用到所有这些尺寸(在 HTML 里)。访问者的浏览器会自动选最合适的尺寸来显示。你设置的尺寸越多,浏览器选择的余地就越大。浏览器会根据设备、网速等因素动态选择尺寸。
这些尺寸有啥坏处?尺寸越多,占用的主机空间就越大。不仅如此,相关的元数据会加到数据库里,让数据库变得又大又慢,处理图片的操作也会变慢,而且更费钱(比如你用图片优化器的时候)。
用哪些尺寸好?
medium_large 这个尺寸基本没啥用(它存在有它的道理,但有了 Perfect Images 的 Retina 支持,这个尺寸就更没用了),所以你应该关掉它。
其他的尺寸就看你的网站了。如果有些尺寸的宽高很接近,你可能不需要那么多。
我个人一开始会关掉差不多一半的尺寸。然后,如果我发现浏览器找不到足够大的尺寸(这种情况很容易发现,图片会变模糊),我再把它们打开就行。
重新生成缩略图/尺寸
如果你修改了尺寸,就需要重新生成相关的缩略图。要做到这点,你可以去 Perfect Images Dashboard,然后点 Regenerate All Entries。你也可以在每张图片上单独点 Regenerate。
![]()
这样不仅会重新创建这些尺寸的缩略图,还会生成新的元数据。你可以直接在网站上看到效果,还可以在 HTML 里检查图片的 srcset 内容。如果你懂点技术,你可能会很喜欢这个功能。
修改图片尺寸的影响
基本上没啥负面影响,但你最好清一下缓存,再检查一下网站有没有 404 错误。有时候,一些老的页面编辑器(或者可能是你自己不小心)会直接用某个缩略图,所以最好检查一下。
另一个问题是,有些旧的缩略图文件可能还留在你的 uploads 目录里。手动删掉这些文件很麻烦,但你可以装个专业版的 Media Cleaner 来自动帮你搞定(用 Meticulous Check 方法,具体可以看 Media Cleaner 教程)。
配置 Retina 支持
在前面的截图里,你可能注意到每个尺寸旁边都有个 Retina 列。启用它之后,每次上传新图片或者生成图片尺寸(我们常说的“重新生成缩略图”)时,都会创建 Retina 图片。
它是怎么工作的?
简单说:Retina 图片是根据你的原图创建的,会自动加到你图片的 HTML 里,然后访问者的浏览器会根据他们的设备、屏幕尺寸等因素自动、智能地选择使用。
其实,这跟你 WordPress 里根据不同图片尺寸生成的缩略图原理一样。这是 WordPress 内置的响应式图片系统的一部分,你可以在这里了解更多。不过,跟那些缩略图不一样,Retina 图片不会注册在元数据里。这样更好、更合理;它不会在任何地方显示为一个选项,也不会造成混乱,更不会拖慢你的 WordPress。
哪些尺寸需要 Retina?
默认情况下,插件会为小尺寸开启 Retina,而大尺寸则不开启。

原因是,你_可能_不需要为那些大尺寸开启 Retina。为啥?因为它们已经够大了,在大多数屏幕上看起来已经很清晰了。
记住:要让一张图片看起来像 Retina,它的大小至少得是它容器的两倍(或者根据屏幕类型更大)。比如,在你的网站上,如果图片的容器是 800x600px,那么里面的图片就需要是 1600x1200px。
创建 Retina 图片
如果你想让 Retina 图片自动创建,确保 Build Automatically 是勾选的。
Perfect Images Dashboard 会给你更多关于 Retina 图片状态的信息,还有一些创建/删除这些图片的方法。

这里的大部分功能都一目了然。别怕用 Build Retina for All Issues(第一次用)和 Delete Retina for All(这个只删除 Retina 图片)。如果你好奇,可以去你的 uploads 目录看看发生了什么!
你的 Retina 图片状态会显示在 Retina (Thumbnails) 列里。每个方块代表一个特定的尺寸。对我来说,第一个是 thumbnail (T),第二个是 medium (M),第三个是 large (L)。那么,每个尺寸都发生了什么呢?
- 蓝色。Retina 图片存在,没问题。
- 黄色。看起来一切正常,但还没有 Retina 图片,试试点 Build 按钮,几秒钟内应该就会变蓝。
- 红色。Retina 文件不存在,而且插件缺少创建它所需要的东西。把鼠标悬停在上面,你会看到更多信息,但通常这意味着你的原图尺寸不够大,无法创建这个特定的 Retina 图片。
如果某个图片是特殊情况,你可以 Ignore 它。这样它就不会再出现在问题列表里了。
全尺寸图片的 Retina
有时候,比如 logo 或者一些特定(通常是小)的图片,你不会用特定的图片尺寸,而是直接用你上传的原图——全尺寸。有些人也只用全尺寸,根本不用图片尺寸。当然,插件不能凭空变出漂亮的 Retina 图片。怎么办?
如果你不是专业版用户,你需要自己上传 Retina 图片,可能要用 FTP,文件名要用 @2x 的约定。
如果你是专业版用户,你可以用 Retina Dashboard 来上传全尺寸的 Retina 图片。你不需要给它命名或者调整大小,只需要确保图片足够大(否则 dashboard 会告诉你太小了,试试看),然后把它拖放到 Full-Size Retina Upload 区域。
另外,如果你想优化流程,每次只上传一个文件,你可以直接从媒体库上传你的照片作为全尺寸的 Retina 图片!普通的全尺寸图片会自动生成(就是 Retina 图片尺寸除以二)。

在插件的 Basic settings 里勾选 Full-Size Retina,让它对所有图片都生效(如果你只用全尺寸的话)。
提供 Retina 图片
默认的方法是 Responsive Images。这个方法不需要 WordPress 做任何额外处理,是目前最好的方法。这也意味着你用的所有插件(和主题)都依赖响应式图片系统;否则它就不起作用。

如果你用的是老的(或者代码写得不好的)插件,你可能需要选个替代方法。PictureFill 通常是个不错的选择;它会分析你 WordPress 生成的 HTML,找到图片,然后用响应式图片系统替换它们。除此之外,它还会加一小段脚本来支持那些可能还不处理响应式图片的浏览器(如果你觉得没用,可以在选项里禁用这个脚本)。Retina.js,这个客户端方法,曾经非常流行。连苹果官网都用过!
注意,没有哪个方法是完美的。最理想的情况是,你用的所有插件和主题都基于响应式图片系统,这样就能完美工作。如果不是,你就需要找到最适合你网站的方法,然后用一些小技巧修复那些不工作的部分(或者就让它们那样)。
你主题的图标、logo 或者图片通常不能由插件自动管理。你可能需要手动为它们上传 Retina 文件,或者写一些 CSS。靠谱的主题通常已经支持这个了。如果它们不支持,请联系主题作者。
Retina 提供方法
PictureFill
Picturefill 方法会动态重写 HTML,使用新的 HTML 标签 srcset。由于浏览器还不完全支持这个标签,所以用 JS polyfill PictureFill 来加载图片。
为了 SEO,你可能还想勾选 Keep IMG SRC 和 Use Lazysizes 这两个选项。第一个选项会保留原始图片在 src 里,这样搜索引擎(和其他服务)就能看到它。但是,对于 Retina 设备,这意味着图片可能会被加载两次(先是普通图片,然后是 Retina 图片)。Lazysizes 会介入,只在访问者滚动到图片附近时才加载 Retina 文件。
Responsive Images
这个方法只在 WordPress 4.4 及以上版本有效。从这个版本开始,WordPress 会自动为文章里的图片创建 srcset,插件会把 Retina 图片加进去。基本上,PictureFill(上面那个)做的解析就省了,这可以提高性能(但其实没那么大,因为我们反正都在用缓存)。只有当你的主题做得特别好时,才应该选这个选项,但说实话,我还没见过哪个主题和安装能只用这个选项就完美实现 100% Retina。
Retina.js
Retina JS 方法是 100% 的 JS 解决方案。HTML 先加载普通图片,如果检测到是 Retina 设备,再加载 Retina 图片。图片会被加载两次,然后有多少张图片就会有多少次请求(用来检查 Retina 文件是否存在)。这对性能不是最好,但也不算太差。很多大网站,比如苹果,都用这个方法。
IMG Rewrite
IMG Rewrite 方法会在检测到 Retina 设备时,动态重写图片的 SRC 标签。但是,由于 HTML 被重写了,这个方法跟缓存不太合得来。
如果你能跟你的主机服务商或者缓存插件的开发者商量,让他们根据 Retina cookie (devicePixelRatio) 来处理不同的缓存,那你就能得到最快的 Retina 解决方案!
Retina-Images
这个方法也很巧妙,但你可能需要是个技术宅。插件会修改你的 .htaccess 文件来处理加载文件的请求。在访问者那边,所有图片看起来都一样,不会有 @2x 的后缀。但服务器发送的文件会根据设备不同而不同。这是个很棒的解决方案,但不是每个人都适用,因为它可能需要一些测试,有时还需要调试。而且它不支持 CDN。
追求完美图片
如果你喜欢优化网站,我相信你到这里已经很享受这个教程和 Perfect Images 了。下面还有几点。
图片阈值
从 WordPress 5.3 开始,大于 2560px 的图片会被自动调整大小,并加上 _scaled 后缀。这通常很烦人,因为 WordPress 保留了你上传的原文件,但哪儿也不用它(而且全尺寸也变了)。如果你在读这个教程,说明你对 WordPress 至少有点了解,所以 WordPress 这个功能不适合你。

这个功能其实是为那些不太懂的用户准备的,防止他们不小心上传超大图片。启用这个选项,确保这个“功能”不会搞乱你的网站。
图片替换
我经常用更好的图片替换旧的,而且我总是在改进我的网站。如果你想轻松上传/替换照片,就启用这个选项。启用后,你可以通过 Perfect Images Dashboard 来操作。这样可以确保你所有的缩略图、Retina 图片和相关的元数据都得到更新。如果你在用我们的 CDN 服务,它会自动使用新图片(耶,没有缓存问题!)。
懒加载
这个功能在 Perfect Images 里有,但你通常不再需要它了。从 WordPress 5.5 开始,懒加载是默认开启的,而且在所有现代浏览器上都有效。你也应该把你安装的那些做懒加载的插件删掉。
我们每个人都不同,我们的 WordPress 安装也一样 🙂 认为每个人都可以用同一种方法来提供 Retina 图片是错误的。我总是推荐用 PictureFill(它也是默认的),但这绝不是你唯一的选择。