WordPress 7.1 把图片处理搬到了浏览器,内存不够、服务器不支持的日子终于到头了!

💡 原文中文,约10200字,阅读约需25分钟。
📝

内容提要

WordPress 7.1 引入客户端媒体处理,利用WebAssembly在浏览器中完成图片压缩、缩放、格式转换等,减轻服务器负载,避免PHP内存溢出。支持HEIC、AVIF、动态GIF转视频,并自动降级至服务端处理。插件和主题开发者需注意相关钩子与过滤器兼容性。

🔎

延伸解读

并非带宽优化,而是服务器减压

客户端处理并非为了减少上传流量,实际上由于原图和所有缩略图都要上传,总字节数反而增加。真正的收益在于减轻服务器CPU和内存压力,避免共享主机上常见的PHP超时和内存溢出。带宽节省体现在访客下载时,因为libvips压缩效果更好,图片体积更小。

安全边界未变,服务器仍校验

客户端处理属于性能优化,而非安全信任边界。服务器依然会对每个上传文件进行MIME类型、图像尺寸、权限检查等校验,并执行相同的wp_generate_attachment_metadata过滤器链。如果浏览器无法处理,会自动降级到服务器端处理,用户无感知。

插件开发者需注意钩子触发变化

wp_generate_attachment_metadata钩子仍会触发,但分为'create'和'update'两次。插件需确保幂等性以正确处理两次触发。此外,服务器专属钩子如wp_image_editors、image_memory_limit等不会触发,因为未使用服务器端图像编辑器。

浏览器兼容性有限,但降级无忧

客户端处理依赖Document-Isolation-Policy,目前仅Chromium 137+支持,Firefox和Safari不支持。但WordPress会自动降级到服务器端处理,体验无差异。Safari上的HEIC解码依然有效,因其不需要该策略。

Q&A

WordPress 7.1 的客户端媒体处理功能是什么?

WordPress 7.1 引入了客户端媒体处理功能,利用 WebAssembly(WASM)在浏览器中完成图片压缩、尺寸调整、格式转换、旋转和缩略图生成,而不是在服务器上进行。服务器只负责存储,从而减轻服务器负载,避免 PHP 内存溢出等问题。

WordPress 7.1 客户端媒体处理相比传统服务端处理有哪些优势?

优势包括:输出一致且高质量(不受服务器 GD/Imagick 版本影响);支持现代格式如 HEIC、AVIF;动态 GIF 可转换为视频;不再出现 PHP 内存溢出错误;减轻服务器负载;上传过程更可靠(独立请求、自动重试、断点续传)。

WordPress 7.1 如何处理 iPhone 的 HEIC 照片?

HEIC 照片会在浏览器中解码并转换为 JPEG 后上传,即使主机没有服务器端 HEIC 支持也能正常处理。原始 HEIC 文件会作为伴生文件(source_image)保留,并在删除附件时一并删除。

WordPress 7.1 中动态 GIF 会被如何处理?

不透明的动态 GIF 会在浏览器中转换为 MP4/WebM 视频,并生成首帧海报图。在媒体库中仍作为单个 GIF 附件,但前端会渲染为原生 <video> 标签,实现自动播放、循环和静音。透明 GIF 不受影响,不支持 WebCodecs 的浏览器(如 Firefox)会继续上传原始 GIF。

WordPress 7.1 客户端媒体处理对插件开发者有什么影响?

插件开发者需要注意:wp_generate_attachment_metadata 钩子仍会触发,但会以 'create' 和 'update' 上下文触发两次,插件需具备幂等性;现有过滤器如 wp_editor_set_quality 等仍然生效;服务器专属钩子如 wp_image_editors 不会触发;可通过 wp_client_side_media_processing_enabled 过滤器禁用该功能;若设置 CSP,需包含 worker-src blob:。

WordPress 7.1 客户端媒体处理支持哪些浏览器?

目前仅基于 Chromium 的浏览器(Chrome 137+、Edge 137+)支持,因为需要 Document-Isolation-Policy 来启用 SharedArrayBuffer。Firefox 和 Safari 不支持,会自动降级到服务器端处理。Chrome on Android 自 146 版本起支持。

WordPress 7.1 客户端媒体处理在什么情况下会降级到服务器端处理?

当浏览器不支持(如 Firefox、Safari)或运行时条件不满足时,会自动降级。运行时条件包括:设备内存大于 2 GB、CPU 核心数至少 2、网络非 2g/slow-2g 且无 Save-Data 标头、CSP 允许 blob: Worker。降级对用户透明,无感知。

WordPress 7.1 客户端媒体处理是否会影响上传的图片格式?

默认不会改变格式,除非通过 image_editor_output_format 过滤器指定转换。但有两个新行为:HEIC 输入会转换为 JPEG 并保留原图;不透明动态 GIF 会转换为伴生视频。AVIF 输入可正常上传,即使服务器不支持。HDR 图像(带增益图)会保持原样上传,子尺寸保留增益图。

🏷️

标签

➡️

继续阅读