跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

点击“注册GitHub”,即表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

跟踪:客户端媒体处理 #61447

正常开放
瑞士风格已打开此问题2024年5月7日·2条评论
正常开放

跟踪:客户端媒体处理 #61447

瑞士风格已打开此问题2024年5月7日·2条评论
标签
[功能]媒体 任何影响媒体管理体验的因素 [类型]性能 与绩效努力相关 [类型]跟踪问题 跨代码库和/或与概述问题相关的工作的战术分解。

评论

@瑞士风格
复制链接
成员

这是之前在#55106并在媒体实验已经(参见示例此博客帖子有关后者的概述)。我相信媒体实验的核心逻辑是实现这一功能的良好基础,而古腾堡正是进一步开发这一功能并将其带给更多人的合适之地。


概述

WordPress中当前的图像处理依赖于服务器端资源和较旧的图像库,导致潜在的性能问题,并且对现代图像格式(如AVIF)的支持有限。这导致用户体验不佳,尤其是在资源密集型任务中,如调整图像大小和压缩图像。此外,缺少像MozJPEG这样的现代压缩工具进一步阻碍了优化工作。

客户端媒体处理通过利用浏览器的功能来处理图像大小调整和压缩等任务,提供了一种解决方案。这种方法不仅缓解了服务器资源的压力,还可以使用更先进的图像格式和压缩技术,最终提高网站性能和用户体验。通过利用WebAssembly等技术,WordPress可以为新内容和现有内容提供更高效、无缝的媒体处理过程。

资源

路线图

考虑到客户端媒体处理解锁的多种可能性,此项目可以分为多个阶段,每个阶段都有其专用的目标和成功标准。例如:

第1阶段

目标

  • 客户端子尺寸图像生成
  • 上传过程中的图像压缩(适用于所有尺寸)
    • 根据大图像大小阈值设置缩小图像
    • 始终压缩所有图像,而不考虑任何较大的图像大小阈值,这与WordPress今天的做法不同
    • 如果需要,提供退出选项(例如,摄影师)
  • 块编辑器中压缩现有图像的方法

很高兴有

  • 将HEIC图像转换为网络安全格式
  • 将动画GIF转换为实际视频
  • 文章编辑器中对文章中所有现有图像进行批量优化的方法
    • 不要与重新生成整个媒体库混淆
  • 旋转图像的自动旋转

非目标

  • 将图像转换为任何其他格式(例如JPEG到WebP)
    • 除了HEIC,它是上面最好的
  • 更改除图像以外的媒体格式的媒体处理(例如视频压缩)
  • 用于重新生成/压缩整个媒体库的UI

第2阶段

目标

  • 将图像(包括子尺寸)转换为任何其他格式(例如JPEG到WebP)

很高兴有

  • 将动画GIF转换为实际视频
  • 提供额外的客户端图像编辑功能,如裁剪、旋转和缩放
    • 使用户更容易制作较小的图像,从而降低文件大小

非目标

  • 更改除图像以外的媒体格式的媒体处理(例如视频压缩)

第3阶段

目标
*以多种不同格式生成子尺寸
*适用于例如,用于将AVIF与JPEG回退一起使用

  • 或者,对于每个子大小,选择文件大小最小的格式
  • 根据作为古腾堡第三阶段的一部分的媒体库改造,将功能从块编辑器扩展到媒体库

很高兴有

  • 更改除图像以外的媒体格式的媒体处理(例如视频压缩)

注意事项和风险

技术复杂性

基于WASM的图像优化需要SharedArrayBuffer(共享阵列缓冲区)支持,这反过来需要跨原点隔离。在不破坏编辑器其他部分的情况下以稳健的方式实现这一点具有挑战性。目前有一些已知问题在Firefox和Safari中,由于这些浏览器不支持无凭证的iframe嵌入。因此,在编辑器中嵌入预览当前无法工作,直到这些浏览器添加对<iframe无凭证>.

由于存在大量不同的编解码器和编码选项组合,图像压缩本身相当复杂。虽然WordPress中现有的服务器端图像处理已经过多年的验证,但在客户端做任何事情都是一个新领域。将有许多边缘情况需要处理。

对于总体架构设计,现有媒体实验该项目包含一个非常坚实的基础,已经解决了许多具有挑战性的问题,并且可以在此基础上进行建设。

置信度

到目前为止,包括WordPress领导层在内,社区的接待都非常积极。显然,人们渴望这种解决方案。

最大的风险是与编辑器的其他部分(插件、嵌入预览)和特定环境的兼容性,因为SharedArrayBuffer(共享阵列缓冲区)。不破坏现有网站非常重要。可以通过广泛的测试、额外的保障措施和文件来减轻风险。缺乏<iframe无凭证>支持并不理想,因为它在某些情况下会降低编辑器UX的性能,但它并没有破坏创作体验,因为存在后备功能。

虽然理论上可以通过其他方法进行图像优化,例如画布API,表示API在不同浏览器之间非常有限。例如,缺少对压缩选项(例如无损或有损)和mime类型(到处都没有AVIF,Safari中没有WebP)的支持。

@瑞士风格 瑞士风格补充[功能]媒体 任何影响媒体管理体验的内容 [类型]跟踪问题 跨代码库和/或与概述问题相关的工作的战术分解。标签2024年5月7日
@安娜扎祖 安娜扎祖补充这个[类型]性能 与绩效努力相关标签2024年5月7日
@拉蒙德
复制链接
成员

首先,非常感谢您提供的细节和所有的背景工作!

将HEIC图像转换为网络安全格式

这是在我最近的一次讨论中提出的。

您对集成此功能的努力程度有何看法?我正在浏览媒体实验报告代码我想知道除了你已经探索过的以外,是否还有其他考虑因素。

这将是一个非常棒的功能-很高兴能够尝试一下,或者尝试组织某人来尝试一下😄 如果你认为在这个阶段值得。我会接受你的指导。

谢谢您!

@瑞士风格
复制链接
成员 作者

瑞士风格 评论2024年5月22日

我最近听说过类似的讨论:)

很高兴听到大家对这类话题感兴趣。我很高兴你已经浏览了一点媒体实验代码。

如果您只对HEIC转换感兴趣,那么它本身就可以相对容易地实现理论上。请参阅#61861作为示范。

然而与本清单中提到的所有其他内容一样,有一些重要方面需要考虑。例如:

  • 您可能希望进行此选择加入/退出,并向用户解释发生了什么
  • 您不想用这样的操作阻塞主线程,所以理想情况下,它在单独的工作线程中运行
    • 在WordPress上下文中添加这样的工作人员并不容易,因为您无法控制如何提供脚本
    • 可能希望从CDN提供WASM文件,因此它在脱机时无法工作
  • 您需要对此类工作线程进行更多控制,例如取消转换操作
  • 生成的图像可能相对较大,因为使用画布创建图像的效率不高
  • 因此,您可能也想运行客户端图像压缩,以便发现诸如跨源隔离之类的问题

也许最重要的是:libheif-js和基础利比海夫许可证是根据LGPL 3.0版,它与GPL v2不兼容,但与GPL v3兼容。鉴于WordPress是根据GPLv2或更高版本,这意味着最终产品只需要在GPL v3下分发。伊纳尔,但我认为这不会飞。所以这意味着libheif-js需要首先进行评估和测试。有一些库是建立在利巴维夫但我过去没有成功使用过这些。

(编辑:通过从外部托管脚本加载libheif-js动态链接也许可以,但又不是律师)

➡️ 旁白:由于这个POC PR,我发现这个回购中的当前许可证检查被破坏了😬 我正在修理#61868

底线:

我特意将这个项目分为多个阶段,因为它比表面看起来更复杂。我强烈建议逐步解决这个问题。

很高兴在其他地方单独讨论HEIC。

免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
标签
[功能]媒体 任何影响媒体管理体验的因素 [类型]性能 与绩效努力相关 [类型]跟踪问题 跨代码库和/或与概述问题相关的工作的战术分解。
项目
还没有
开发

没有分支或拉请求

3名参与者