关于webp:WebP-格式图片在实际项目中的使用方式

原文地址:https://segmentfault.com/a/1190000038458838
作者:Fw恶龙
本文首发于:思否

一、前言

对于 WebP 的反对状况,以及实用场景此处不做具体阐明,具体见官网文档。

先说论断,目前 WebP 反对状况占比拟大(数据如下),在适宜的场景下能够应用 WebP 格局图片来进步页面加载速度。

  • 反对的浏览器占比达到近90%(数据起源:Can I Use)
  • 安卓零碎下大部分浏览器已反对,而安卓零碎在国内挪动端系统中占比达80%(数据起源:statcounter)

目前使页面反对 WebP 格局图片有两种形式:

  • 前端开发过程生成对应格局图片并编写 WebP 相干代码(本文介绍)
  • 服务器端反对生成 WebP 格局图片,前端编写相干加载代码(这部分未深入研究)

二、压缩成果

设置压缩品质为81时,能够在尺寸和品质两者间获得较好的均衡。(测试后果与图片类型以及色调丰盛度无关,具体的压缩品质能够依据理论状况自行调整)

三、在开发中如何应用?

1. html

<picture> 标签会依据浏览器反对状况加载对应资源。

<picture>
    <source srcset="./webp/demo.webp" type="image/webp">
    <img src="./images/demo.png"/>
</picture>

2. css

通过 js 检测以后浏览器是否反对 WebP 格局的图片(细节见下文 js 代码),在 html 标签上动静增加类名 webp,依据浏览器反对状况加载不同格局的图片。

.box {
    width: 5.73rem;
    height: 6.57rem;
    background-image: url(../images/demo.png);
    background-repeat: no-repeat;
    background-size: 100% 100%
}

.webp .box {
    background-image: url(../webp/demo.webp)
}

3. js

通过创立 canvas 标签生成 WebP 格局图片,依据其是否生成胜利,来判断浏览器是否反对 WebP 格局的图片。

var isSupportWebp = function () {
    if(document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0) {
        document.getElementsByTagName('html')[0].classList.add('webp');
    } else {
        console.warn("The browser doesn't support WebP.");
    }
}

isSupportWebp();

四、开发流程

以下流程仅提供大抵思路,具体的 webpack 相干配置会依据我的项目有所出入。

  1. 设计稿产出 jpg/png 格局切片
  2. 开发过程应用 webpack 插件 imagemin-webp-webpack-plugin 依据切片主动生成 WebP 格局的切片
  3. html 头部引入上文对应的 js 检测代码
  4. html 中的 <img> 标签改为应用 <picture> 标签
  5. css 通过预处理器封装背景相干款式的函数,以下为 stylus 代码

    bg-webp($url, $ext = png)
        background-image url($baseUrl + $url + "." + $ext)
        .webp &
            background-image url($baseUrlWebp + $url + ".webp")

五、注意事项

1. 以下应用形式会导致 WebP 图片变大

  • 引入渐进式的 jpg/png 格局的图片(WebP 不反对渐进式格局)
  • 引入曾经压缩过的图片(webpack 无奈判断该图片是否压缩过)

2. 应用场景

适宜

  • 较大的图片,如:背景图

不适宜

  • 小图不倡议应用,差异不大
  • canvas 等合成图片的还未尝试,因波及跨域、兼容性等问题,临时不应用

六、相干文档

  • imagemin-webp-webpack-plugin:用于生成 WebP 格局图片
  • write-file-webpack-plugin:使得在开发环境中可能失常生成 WebP 格局图片
  • copy-webpack-plugin:复制原始图片资源,以触发 imagemin-webp-webpack-plugin
  • webp图片在我的项目中的实际:前端以及服务器端的应用形式
  • 判断浏览器是否反对 webp 的几种解决办法

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理