如何通过 WebP 自适应方案减少图片资源大小

摘要:
WebP自适应解决方案解决了哪些问题?如何通过再次使用云CDN实现WebP适配?如下图所示,在CDN层上调整WebP时需要考虑以下几个方面:1.CDN如何确定客户端是否支持WebP?该部分目前由HTTPAccept标头判断。如果支持,则返回并缓存WebP副本;如果没有,请返回原始图像。WebP适应的效果是什么?最后,测试了PNG图像。在CDN自适应WebP之后,图像大小从290KB减少到69KB。效果非常明显。不同的图像格式具有不同的压缩比。

前言

我们知道,理想的网页应该在 1 秒内打开,而在页面的整体大小中,图片往往是所占比例最大的一部分(大约占到 60% 以上,更多了解请点击),也可以参照如下图所示。优化图片不仅可以加快页面显示,还能降低移动网络的流量费用。原图产生的 PNG、JPEG、GIF 和 SVG 图片一般都有很大的压缩余地。下文将重点介绍一款图片新格式:WebP,从而揭开它神秘的面纱。

如何通过 WebP 自适应方案减少图片资源大小第1张

解决方案:使用 WebP 优化图像

1、什么是 WebP ?

WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。更多了解参照 WebP 官网文档

2、WebP 客户端兼容性

Google Chrome 和 Opera 浏览器以及许多其他工具和软件库都支持 WebP,但是当前并非所有浏览器都支持 WebP,支持的情况参见如下图所示:

如何通过 WebP 自适应方案减少图片资源大小第2张

详细的支持情况参见 WebP 支持情况

WebP 自适应方案解决了什么问题?


使用 WebP 图片格式,显而易见,可以享受的好处就是:

1、WebP 格式的图片可以提供更好的压缩比和更小的文件大小,可以减少网络传输,使得网络传输的速度更快;

2、网络传输的流量减少了,可以节省 CDN 流量消耗,节省带宽成本;

3、当前还有一部分客户端并不支持 WebP 格式,可以通过 CDN 层去判断,对于支持的客户端,响应 WebP 格式的图片;不支持的客户端,响应原图。从而实现无缝适配。

如何判断浏览器支持 WebP 格式?

如下图所示,是通过 Chrome 浏览器开发者工具抓包显示,可以通过查看响应头和请求头相关字段,得知该图片已经被 CDN 自动转化为 WebP 格式:

如何通过 WebP 自适应方案减少图片资源大小第3张

事实上,可以通过 HTTP  Accept 头就可以判断该浏览器是否支持 WebP 格式的图片,结合上图,Chrome 浏览器在发起请求的时候,会带上 Accept 头,且其值包括:image/webp,此时就说明该浏览器支持 WebP 格式图片;参见如下格式:accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

另外,通过 HTTP 响应头里面的 Content-Type 就可以判断文件的真正类型,例如:Content-Type:image/webp,就说明此次服务端响应的是 WebP 格式的副本图片。

如何通过又拍云 CDN 实现 WebP 自适应?

如下图所示,在 CDN 层做 WebP 的自适应,需要考虑如下几个方面:

如何通过 WebP 自适应方案减少图片资源大小第4张

1、CDN 如何判断客户端是否支持 WebP ?

该部分目前是通过 HTTP  Accept 头来判断的,如果支持,则返回 WebP 副本并进行缓存;如果不支持,则返回原图。详细介绍参照上文介绍。

2、CDN 如何实现实时图片格式转换?

针对用户源站并非 WebP 格式图片的时候,CDN 层需要支持将原图图片的实时转换为 WebP 格式副本,这个在 CDN 层面是无缝支持的。这样的场景是这样的:

  • 客户端浏览器请求一个图片资源,例如:http://webp.example.com/test.png;
  • CDN 通过 Accept 头已经判断客户端浏览器支持 WebP 格式的图片;
  • CDN 回用户源站取回原图并将原图实时转为 WebP 格式的图片,并响应给客户端浏览器。

这里值得强调的是,又拍云 CDN 已经无缝兼容了各种作图场景和访问方式,包括:

  • 原图访问 ,示例:/a.jpg
  •  缩略图版本号,示例:/a.jpg!123
  • URL 作图 ,示例:/a.jpg!/format/webp
  • 版本号 + URL 作图:/a.jpg!123/format/webp

详细作图场景请参见图片处理服务

3、如何实现相同 URL 访问,缓存不同副本图片?

这个需要利用到缓存里面的 Vary 机制了,同一个 URL 根据不同 Header 头的值缓存多份不同的拷贝,同时保持 URL 不变。例如:

  • 请求头字段 Accept: image/webp -> 响应头需要满足 Vary: Accept 以及 Content-Type: image/webp;
  •  请求头字段 Accept-Encoding: gzip -> 响应头需要满足 Vary: Accept-Encoding 以及 Content-Encoding: 

以上,回答以上 3 个问题之后,CDN 就可以实现了 WebP 的自适应。开启 WebP 特性之后,可以产生怎样的效果?且看下文。

使用 WebP 自适应之后的效果如何?

下面我们来做一次测试,访问一张 PNG 图片,看看开启前后的效果怎样。

1、开启前

随机在又拍云官网产品文档上找到了一张 PNG 图片,截图所示:

如何通过 WebP 自适应方案减少图片资源大小第5张

通过截图显示,可以得到如下信息:

 – content-length:290334
 – content-type:image/png
 – x-cache:MISS(S) from mix-hz-fdi-165; HIT(R) from ctn-zj-lna3-016

可以知道,该图片大小为 290 KB,图片类型为 PNG,在 CDN 边缘节点已经缓存命中。

2、开启后

开启 WebP 特性之后,这里强调一下,CDN 边缘命中之后,是不会触发 WebP 自动转换。为了触发该特性,我针对刚才的访问链接做一次手动刷新。然后重新请求图片资源,重新抓包,看如下截图信息:


如何通过 WebP 自适应方案减少图片资源大小第6张

通过截图显示,可以得到如下信息:

 – content-length:69038
 – content-type:image/webp
 – x-cache:MISS from 403-zj-fud-208, MISS from mix-hz-fdi-168, MISS from ctn-zj-lna3-016

可以很明显的看出,图片大小减少了,为:69 KB,图片格式转换为 webp 格式。

总结下,此次测试了一个 PNG 图片,通过 CDN 自适应 WebP 之后,图片大小从 290 KB 减少到了 69 KB,效果是非常的明显,不同的图片格式,压缩比会有所不同。如果您的网站图片居多,且希望提升用户访问体验,减少 CDN 访问带宽,我们期待您的测试和使用。

免责声明:文章转载自《如何通过 WebP 自适应方案减少图片资源大小》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发网络数据之AFNetworking使用前端-网页打印-Jqprint-网页打印像素设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

扫码登录功能如何实现?一文搞懂主流的扫码登录技术原理

原文地址:https://my.oschina.net/u/4231722/blog/3154805 作者:imtech 1. 引言 扫码登录这个功能,最早应该是微信的PC端开始搞,虽然有点反人类的功能(不扫码也没别的方式登录),但不得不说还是很酷的。 下面这张图,不管是IM开发者还是普通用户,应该很熟悉: 于是,搞IM产品的老板和产品经理们,从此又多了...

友盟+UAPM应用性能报告:Android崩溃率达0.32%,OPPO 、华为、VIVO 崩溃表现良好

​随着信息技术高速发展,移动互联几乎已成为了一种生活方式的代名词,在全民上网的数字热潮中,如何能最大程度保障产品服务的稳定性,提供良好的用户体验,是当前企业都需要思考和亟待解决的问题。App的应用性能稳定是良好用户体验中非常关键的一环,而现实情况却是应用崩溃、卡顿、加载缓慢、页面白屏等问题,频频出现在用户的真实体验之中,成为影响业务表现的直接杀手。为此,应...

用SourceForge管理开源项目

SourceForge.net是开源软件开发者进行开发管理的集中式场所,也是全球最大开源软件开发平台和仓库。 Sourceforge为开源软件开发测试提供了高性能的免费空间: 1、空间稳定性非常高,无广告,速度快,无限空间容量以及流量。 2、支持PHP、Perl、Python、Ruby、shell等多种脚本,支持FTP上传。 3、可以绑定自己的顶级域名,...

SQL Server 2008 R2 启动企业管理器,出现“无法读取此系统上以前注册的服务器的列表”

方法 打开C:Users<username>AppDataLocalTemp 要先删除名为1和2的文件,然后分别创建两个名为 1 和 2 的文件夹。 出现问题的原因有可能是清理了*.tmp文件。 下面是图,打开SQL2008R2 点击继续,登陆进去,弹出...

Linux程序包管理.md

rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器。RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身的软件包管理器(RPM Package Manager)。最早由Red Hat研制,现在也由开源社区开发。RPM通常随附于Linux发行版,但也有单独将R...

tar.xz如何解压:linux和windows下tar.xz解压命令介绍

在linux下怎么解压和压缩tar.xz文件? (本文由www.169it.com搜集整理) 在linux下解压tar.xz文件步骤 1 2 # xz -d ***.tar.xz  //先解压xz # tar -xvf  ***.tar //再解压tar tar.xz压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。 在lin...