作者 | Jackson
编辑 | 尾尾

不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题。而 WebP 技术的出现,为解决该问题提供了好的方案。本文将为大家详细介绍 WebP 技术,同时也会分享该技术在 MIP 项目中的实践。

一、什么是 WebP ?

WebP 是由 Google 收购 On2 Technologies 后发展出来的图片格式,以 BSD 授权条款发布。目前已经在不同厂商之间进行了尝试,如 Google、Facebook、ebay、百度、腾讯、淘宝等。

二、为什么选择 WebP?

1. WebP 的优势

WebP 在支持有损、无损、透明图片压缩的同时,大大减少了图片的体积。据统计,WebP 无损压缩后比 PNG 图片体积减少了 26%,有损图片比同类 JPEG 图像体积减少了 25%~34%,下面总结 WebP 在不同指标上所能获得的提升对比。

(1)体积和流量方面

根据业界给出的改造数据可知,改造 WebP 之后图片体积会降低很多,具体可参照 WebP 体积测试,同时也可参照下图。

在 MIP 项目中,通过我们的本地测试获得的数据如下图所示。

从以上测试可知,如果将体积换算成带宽,WebP 不同模式下都会节省大量流量。科技博客 Gig‍‍‍aOM 曾报道,谷歌的 Chrome 网上应用商店采用 WebP 格式图片后,每天可以节省几 TB 的带宽;Google+ 移动应用采用 WebP 图片格式后,每天节省了 50TB 数据存储空间。

(2)速度方面

图片的加载速度还要取决于网络时间,所以我们没有测试确定的数据,不过可以参考业界的数据:科技博客 Gig‍‍‍aOM 曾报道,YouTube 的视频略缩图采用 WebP 格式后,网页加载速度提升了 10%;谷歌的 Chrome 网上应用商店采用 WebP 格式图片后,页面平均加载时间大约减少 1/3。

2. 兼容性

目前来说,WebP 的支持程度也在不断上升,据 2017 年 10 月 12 日在 can i use 上的查询显示,全球 WebP 的支持程度已经达到 73.64%,如下图所示。

而也正是因为这种天然的图片体积优势和发展趋势,MIP 团队也决定进行初步的实践尝试,以提升页面用户体验。

三、WebP 实践经验

1. 如何判断浏览器支持程度?

WebP 的判断方法在 官方文档 中进行了总结,大致分为 HTML5 picture、嗅探和 Request Header 三种方式,下面展开介绍这三种方式。

(1)HTML5 picture

这种方法不进行 WebP 支持程度的判断,而是利用 html5 picture 元素的特性,允许开发者列举出多个图片地址,浏览器根据顺序展示出第一个能够展现的图片元素,如

<picture><source type="image/webp" srcset="images/webp.webp"><img src="data:images/webp.jpg" alt="webp image">
</picture>

上面的示例在浏览器不支持 WebP 图片的情况下自动回退到 jpg 格式进行展示,但 picture 的支持程度还不是很完善,开发者可以根据需求决定是否进行使用。

(2)嗅探

嗅探的方式是指直接向浏览器中插入一段 base64 的 WebP 图片,检测图片是否能够正常加载,依据该方法进而判断支持程度,如官方给出的嗅探函数:

// check_webp_feature:
//   'feature' can be one of 'lossy', 'lossless', 'alpha' or 'animation'.
//   'callback(feature, result)' will be passed back the detection result (in an asynchronous way!)
function check_webp_feature(feature, callback) {var kTestImages = {lossy: "UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",lossless: "UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==",alpha: "UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==",animation: "UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA"};var img = new Image();img.onload = function () {var result = (img.width > 0) && (img.height > 0);callback(feature, result);};img.onerror = function () {callback(feature, false);};img.src = "data:image/webp;base64," + kTestImages[feature];
}

其中包含了对有损、无损、透明图、动图等 WebP 图片的嗅探,这是一种最为保险的方法。不过缺点也很明显,在图片类型不一且量级较大的情况下,前端并不能知道哪些图片是有损,无损,亦或是透明的,也没有办法对其中一种特定类型做特定策略,所以即使知道不支持该类型的 WebP,然而我们也没有办法主观的去做容错。所以 * 这种方法只适合于图片类型单一 * 的情况,如开发者知道所有图片都是有损的,或是动图等,有针对性的去处理。

同时在处理的过程中,为了提高嗅探效率,嗅探之后可以将结果以本地存储的方式进行保存,如 cookie ,方便下次直接进行调用。

(3)Request Header

* 这种方式是较为符合标准的解决方案 *,浏览器在支持 WebP 图片格式的情况下,会在请求的 http header accept 中携带 webp/image 的字段,后端接收到请求之后可以按照该形式来判断是否返回 WebP 图片内容。

MIP 在实践中采用的是该方法,当用户访问 MIP Cache 上的页面时,不需要开发者替换图片,MIP Cache 根据 http header 自动决定是否返回 WebP 图片内容。

不过这个过程也依然有坑——国内浏览器层出不群,大部分都向标准化的方向靠近,但仍然需要一定的时间来跟进。所以,在实践过程中我们就发现了这样的问题:虽然 http header accept 中包含了 webp/image 的字段,但实际上是不支持 WebP 格式的(华为 MT7 自带浏览器),具体体现在动图(animation)的 feature 上。而相应的解决方案其实也很简单,就是在 WebP 图片加载失败后发起原图请求,让图片能够正确的展示在页面上,具体方式是通过 img onerror 函数执行对应逻辑。

2. WebP 转换工具

WebP 的转换工具很多,主要包含了命令行和可视化界面两种:

(1)命令行

官方对于每一种 WebP 格式也分别提供了对应的 转换工具,主要包含了 cwebp、dwebp、vwebp、webpmux、gif2webp 等几种,开发者可以择优选择。

(2)可视化

页面也提供了不同可视化的软件进行 WebP 格式图片转换,如:iSparta。

四、总结

WebP 作为一种新型图片格式,不但能够节省流量,减少图片体积,一定程度上也可以优化用户体验。MIP 项目对于 WebP 支持目前已上线,大家可以浏览 MIP 页面进行体验。同时作为关注速度优化的 MIP 团队,我们将不断迭代前行,致力于打造极致的用户体验。

WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享相关推荐

  1. WebP 在减少图片体积和流量上的效果如何?—— WebP 技术实践分享

    作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP 技术的出现,为解决该问题提 ...

  2. WebP 在减少图片体积和流量上的效果如何?WebP 技术实践分享

    作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP技术的出现,为解决该问题提供 ...

  3. 云上拍客梨视频 基于阿里云的技术实践分享

    摘要: 梨视频大部分的业务都选择了阿里云,其中一个主要原因是阿里云提供基于钉钉群构建的24贴身技术支持,刘隽表示,这种服务模式可以更充分.高效的对接需求,快速得到反馈,这也让梨视频的同学有信心去尝试一 ...

  4. 利用WebP来缩小图片体积

    WebP vs 传统格式 WebP 无损图像文件比 PNG 文件小 26% 在等效结构相似性 (SSIM,structural similarity) 索引下,WebP 有损图像文件比 JPEG 图像 ...

  5. Optimizilla中文在线无损压缩JPG、PNG图片,不降低画质有效减少图片文件大小

    长久以来,我都是使用 TinyPNG 来压缩要上传到网站的图片,后来 TinyJPG 出现后,支援的图片格式更加广泛,能将 JPG.PNG 格式压缩并减少 70% 左右的容量大小,而且肉眼看不出变化, ...

  6. 当TensorFlow遇上Kubernetes ---中兴通讯人工智能计算平台的技术实践

    本文由 [FMI飞马网]原创,原文链接:当TensorFlow遇上Kubernetes ---中兴通讯人工智能计算平台的技术实践 分享一些关于大数据的干货​:TensorFlow介绍.安装教程.图像识 ...

  7. iOS 客户端基于 WebP 图片格式的流量优化(下)

    在iOS 客户端基于 WebP 图片格式的流量优化(上)这篇文章中,已经介绍了WebP格式图片的下载使用,仅仅只有这样还远远不够,还需要对已经下载的图片数据进行缓存. 曾经有句名言『计算机世界有两大难 ...

  8. 如何查看网页上的图片体积大小或容量大小?

    前言 最开始是想知道网页图片的质量百分比如何界定.而压缩比是影响图片质量(同一张图片.相同像素)的关键.一般来讲,压缩比低,图片文件体积大:压缩比高,体积小. 如何查看网页上的图片体积大小? 1.Go ...

  9. 解决 .webp 格式图片在 ios 设备上无法正常显示的问题

    解决.webp 格式图片在 ios 设备上无法正常显示的问题 使用字符串的 replace() 方法,将 webp 的后缀名替换为 jpg 的后缀名 // 定义请求商品详情数据的方法 async ge ...

最新文章

  1. pxe linux 配置文件,Linux PXE 部署
  2. 找不到或无法加载主类 org.jivesoftware.openfire.starter.ServerStarter
  3. Nginx加入linux系统服务
  4. git仓库删除文件夹/文件
  5. 徒手造了个轮子 — 实现epoll
  6. [css] 你是怎样抽离样式模块的?
  7. 数据结构上机实践第10周项目1 - 二叉树算法验证
  8. dw2019连接mysql数据库_Python3连接MySQL数据库
  9. 圈圈教你玩usb第一版硬件实物使用说明
  10. 计算机四级网络工程师(计算机网络单选)- 知识点
  11. 如何破解校园网wifi?怎样破解校园网不能共享wifi?校园网路由器如何破解?
  12. XShell 6和Xftp6
  13. OpenSSH私钥BEGIN OPENSSH PRIVATE KEY与BEGIN RSA PRIVATE KEY格式转换方式
  14. html中颜色取样器工具,photoshop基础教程:颜色取样器工具的使用详解
  15. 优化js脚本设计,防止浏览器假死
  16. 设计模式——设计模式名中英文对照
  17. 揭秘小程序上线不到一周,每天2万销售额,究竟怎么做到的?
  18. C++ Lua库 源码编译及使用(VS2019)
  19. Java笔试真题及参考答案
  20. python中title函数有什么用_Python title()字符串处理函数的使用

热门文章

  1. springboot dubbo引入包_spring boot 集成 dubbo 企业完整版
  2. mysql报警代码183_mysql启动报错:/usr/bin/mysqld_safe: line 183: 23716 Killed
  3. C语言 *p++/*(p)++/*(p++)/*p++ - C语言零基础入门教程
  4. 好爽 java_Intellij是进行scala开发的一个非常好用的工具,可以非常轻松查看scala源码,当然用它来开发Java也是很爽的,之前一直在用scala ide和ec...
  5. android 调用系统短信接口开发,聚合数据Android SDK 短信api接口验证演示示例
  6. 计算机user用户的密码存储在,windows存放用户密码的文件
  7. vue仿饿了么点餐手机端
  8. android访问百度新闻,百度新闻(com.baidu.news) - 8.3.6.0 - 应用 - 酷安
  9. python思想读后感_《Deep Learning with Python》读后感精选
  10. php历史上的今天源码,代码获取历史上的今天发生的事_基础知识