又拍云
4.7 / 5.0
声明:VPS主机测评网仅分享信息/测评(有时效性),不销售或代购、不提供任何支持,请自行辨别。

评测概述

WebP格式相比JPEG/PNG可减小25‑35%的体积,但需要兼容性处理。结合cdn的边缘处理能力,可以实现根据客户端请求动态返回WebP或原图,无需修改源站代码。

本文介绍如何利用CDN的图片处理功能(如又拍云、阿里云、Cloudflare Polish)自动转换WebP。

一、WebP的优势与兼容性

WebP支持无损、有损压缩,透明度,动画。主流浏览器(Chrome、Firefox、Edge、Safari 14+)均支持WebP。但旧版Safari可能不支持。因此需要降级方案:当浏览器支持WebP时返回.webp文件;否则返回原图。

二、方案一:使用又拍云/七牛云图片处理API

又拍云和七牛云提供实时图片处理参数。在图片URL后加 !/format/webp(又拍云)或 ?imageMogr2/format/webp(七牛云)。

结合CDN,可以在HTML中通过JavaScript检测支持性动态替换URL,或使用<picture>标签:

<picture>
  <source srcset="image.jpg!/format/webp" type="image/webp">
  <img src="image.jpg" alt="example">
</picture>

这种方式无需修改源文件,灵活但需要修改前端模板。

三、方案二:Cloudflare Polish(Pro及以上)

Cloudflare Polish自动将JPEG/PNG转换为WebP,无需配置。只需在Cloudflare仪表盘中开启Polish。免费版不支持WebP转换,Pro及以上($20/月)才提供。

配置路径:Speed → Optimization → Polish → 选择“Lossless”或“Lossy”。WebP自动协商:浏览器请求头包含Accept: image/webp时返回WebP。

四、方案三:阿里云/腾讯云CDN图片处理

阿里云CDN与OSS配合,可以开启“图片处理”功能,设置样式(如image/format/webp)。腾讯云类似,支持实时处理和WebP自适应。需要额外配置规则。

五、最佳实践:懒加载 + WebP + 降级

  1. 使用原生懒加载(loading="lazy")减少初始请求。
  2. <picture>中提供WebP和原图两份资源,让浏览器选择。
  3. 使用CDN的边缘处理,避免存储两份文件。
  4. 对已上传的图片无需重新上传,只需修改URL参数。

六、示例代码(JavaScript检测支持)

function supportsWebP() {
  return new Promise(resolve => {
    const img = new Image();
    img.onload = () => resolve(true);
    img.onerror = () => resolve(false);
    img.src = 'data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQABgBwlpAADcAD+/gbQAA==';
  });
}

然后在页面加载后替换所有图片URL为.webp版本。

七、注意事项

  • 原图质量好的情况下,WebP有损压缩不明显,建议使用有损80-90%质量。
  • 某些CDN的图片处理功能按请求次数或转换次数收费,注意控制成本。
  • CDN缓存的WebP文件单独存储,清除原图缓存不会自动清除WebP缓存。

图片优化是提升网站性能性价比最高的手段,推荐尽早实施。