一文了解图片降级方案

简介: 在做项目优化的时候,发现页面加载很慢。结果一看主要的问题就是就是图片的大小过慢,然后呢准备呢去做优化, 本来想去用webp,去优化的,但是呢这个图片是不是我们就用不了呢,然后看了下业界优化王,直接打开了淘宝网的首页。淘宝的首屏加载是很快的,然后 我就去看了下他图片的格式:图片这种图片其实是做了降级处理如果说 支持webp就使用, 如果不支持的话就使用jpg为什么要做图片降级图片的格式有很多 jpeg png webp等,我们经常使用webp格式的图片,因为webp格式的图片拥有无损压缩和有损压缩两种模式而且压缩率更高等优点。但是webp格式的图片同样也有缺点,ios webvie

在做项目优化的时候,发现页面加载很慢。结果一看主要的问题就是就是图片的大小过慢,然后呢准备呢去做优化, 本来想去用webp,去优化的,但是呢这个图片是不是我们就用不了呢,然后看了下业界优化王,直接打开了淘宝网的首页。淘宝的首屏加载是很快的,然后 我就去看了下他图片的格式:


image.png


这种图片其实是做了降级处理如果说 支持webp就使用, 如果不支持的话就使用jpg


为什么要做图片降级


图片的格式有很多 jpeg png webp等,我们经常使用webp格式的图片,因为webp格式的图片拥有无损压缩和有损压缩两种模式而且压缩率更高等优点。但是webp格式的图片同样也有缺点,ios webview和IE不支持webp。所以我们要检测浏览器是否支持webp格式的图片,如果不支持webp则展示图片的其它格式。


降级方案



  • html 图片懒加载


<div class="box">
    <img   alt="">
</div>
复制代码


  • 检测浏览器是否支持该webp


function isSupportWebp(cb) {
        let img = new Image();
        img.src = webpPath;
        img.onload = function() {
            cb(true);
        }
        img.onerror = function() {//浏览器不支持该图片格式时会触发
            cb(false);
        }
    }
复制代码


  • img path 截取 图片展示


function LoadImg() {
        let img = document.getElementsByTagName('img')[0];
        isSupportWebp(function(isSupport) {
            if(isSupport) {
                img.src = webpPath;
            } else {
                let index = webpPath.indexOf('_.webp');
                if(index!=-1) {
                    webpPath = webpPath.slice(0,index);
                }
                img.src = webpPath;
            }
        });
    }
复制代码


  • 完整代码


<body>
<div class="box">
    <img   alt="">
</div>
<script>
    let webpPath = './img/O1CN01xYaPxM1CgQAujTNvy_!!0-saturn_solar.jpg_220x220.jpg_.webp';
    function isSupportWebp(cb) {
        let img = new Image();
        img.src = webpPath;
        img.onload = function() {
            cb(true);
        }
        img.onerror = function() {
            cb(false);
        }
    }
    function LoadImg() {
        let img = document.getElementsByTagName('img')[0];
        isSupportWebp(function(isSupport) {
            if(isSupport) {
                img.src = webpPath;
            } else {
                let index = webpPath.indexOf('_.webp');
                if(index!=-1) {
                    webpPath = webpPath.slice(0,index);
                }
                img.src = webpPath;
            }
        });
    }
   LoadImg();
</script>
</body>
相关文章
|
JavaScript 前端开发 容器
SolidJs尝鲜与Web Component实践造虚拟滚动的轮子
「造轮子」虚拟滚动 + soild + Web Component
1823 1
|
缓存 前端开发 JavaScript
React Table 表格组件使用教程 排序、分页、搜索过滤筛选功能实战开发
在日常开发中,特别是内部使用的后台系统时,我们常常会需要用表格来展示数据,同时提供一些操作用于操作表格内的数据。简单的表格直接用原生 HTML table 就好,但如果要在 React 中实现一个功能丰富的表格,其实是非常不容易的。在本站之前的文章《最好的 6 个 React Table 组件详细亲测推荐》 中有提到过 react-table 这个库,如果对这个库不太了解的同学可以先了解一下,这里不再赘述。简而言之,react-table 是一个非常强大的库,它与常见的表格组件不同,它不负责渲染 HTML 和 CSS,而是提供了一系列的 hooks 让我们可以灵活地构建功能强大的表格组件。
1488 0
echarts如何设置滚动条(dataZoom),实现横向或纵向滚动
echarts如何设置滚动条(dataZoom),实现横向或纵向滚动
echarts如何设置滚动条(dataZoom),实现横向或纵向滚动
【解决方案】pytion 运行时提示 import psutil ModuleNotFoundError: No module named ‘psutil‘
【解决方案】pytion 运行时提示 import psutil ModuleNotFoundError: No module named ‘psutil‘
695 2
|
缓存 Java C语言
深入汇编语言理解volatile关键字
深入汇编语言理解volatile关键字
|
存储 自然语言处理 关系型数据库
MySQL的match用法说明
MySQL的match用法说明
580 4
|
JavaScript 知识图谱
【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners
【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners
|
存储 算法 安全
深入学习 GC 算法 - 标记清除算法
深入学习 GC 算法 - 标记清除算法
4646 2
深入学习 GC 算法 - 标记清除算法