如何利用 webp 进行小程序图片加载速度的优化

本文讲述了作者在微信小程序开发中遇到图片加载慢的问题,探讨了WebP格式作为解决方案的优势,介绍了如何通过判断设备类型实现安卓设备上的WebP图片加载优化,以及使用的工具和技术,如VSCode和微信小程序开发工具。
摘要由CSDN通过智能技术生成

导语

最近很长一段时间没有更新博客,一方面是自己最近参与了小程序的开发,另一方面也是自己略有些怠惰,给自己记个过~那么现在既然回到学校那么还是要分享一些知识的。

前一阵子参与微信小程序开发时遇到了一个小问题,就是图片的加载速度不理想。即使我们对于图像的大小一缩再缩,但后台服务器中200-300KB的图片在小程序里往往需要等待数十秒才能加载完毕(仅在安卓机上测试过,苹果应该优化得好一些),这个图片加载的速度导致我们的小程序体验比较糟糕。我经过搜索发现webp这种图片格式可能可以为我们提供一个可行的替代方案。

知识补充

WebP(发音:weppy)是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,派生自影像编码格式VP8,被认为是WebM多媒体格式的姊妹项目,是由Google在购买On2 Technologies后发展出来,以BSD授权条款发布。
WebP最初在2010年发布,目标是减少文件大小,但达到和JPEG格式相同的图片质量,希望能够减少图片档在网络上的发送时间。根据Google较早的测试,WebP的无损压缩比网络上找到的PNG档少了45%的文件大小,即使这些PNG档在使用pngcrush和PNGOUT处理过,WebP还是可以减少28%的文件大小。

维基百科

说人话?好。webp就是谷歌发布的一款可以在保证图片质量较为完整的情况下压缩率较高的网络图片格式。

这么一看,webp岂不是无敌?实际上对于我们的项目它目前还是有局限性的:iOS端的微信小程序是不支持webp的。

但是方法总是有的,既然iOS有它自己的优化方法,那么我就不让它搭上webp这班车了,我们可以判断设备的类型,然后针对安卓的手机进行优化。

教程

作案工具

  • vscode
  • 微信小程序开发工具

手段

首先我们需要定义一个全局变量作为判断是否为苹果设备的依据。所有的全局变量均在app.js里定义,在app.js中加入全局变量iOS,并用wx.getSystemInfo获取设备信息进行判断:

App({
  onLaunch: function () {
    var that = this;
    wx.getSystemInfo({
      success: (res) => {
        console.log(res);                           //res是一个对象,包含设备信息。其中res.system的内容则是设备系统的版本
        if (res.system.indexOf("iOS") != -1) {      //如果系统版本中有iOS三个字母,则判定为苹果设备
          that.globalData.iOS = true;
        }
      },
    });
  globalData: {
    iOS: false,                                     //默认iOS的值为false
  },
})

到这里我们做好了设备类型的判断,接下来我们就要在独立的页面中进行链接替换。打个比方,如果这台设备是苹果,那么图片链接就使用 …/a.png ;如果是安卓,那么链接就换成 …/a.webp 。

给出一个示例页面:

html:

<!--简单的页面,一个view标签,一张图,图片链接用js传入数据-->
<view class="container">
    <image src = '{{img1}}' />
</view>

javascript:

Page({                                              //传入页面的数据
  data: {
    img1:"../a.png",
  },
})

这时我们在js中加入链接替换的内容:

const app = getApp();                               //这行代码很重要,用来从app.js中获取全局变量

Page({
  data: {
    img1:"../a.png",
  },
  //事件处理函数,onLoad指在页面加载中的操作
  onLoad: function () {
    if (!app.globalData.iOS) {                      //app.globalData.iOS即为上面定义的全局变量,如果iOS为假,则替换链接
      this.setData({
        img1:"../a.webp",
      });
    }
  },
})

这样就完成了webp的替换,还是挺容易的,没有想象中的那么复杂。唯一的问题是页面多了以后替换起来会比较麻烦,不过如果都把图片的数据写在js里的话,替换起来会快很多。

对于小程序本地图片加载优化,可以考虑以下几个方面: 1. 图片压缩:尽量使用图片压缩工具将图片文件大小降低,减少加载时间和带宽消耗。可以使用一些在线图片压缩工具或者开发者工具提供的压缩功能。 2. 图片尺寸适配:根据小程序的实际需求,调整图片尺寸,避免使用过大的图片。可以通过设置 `width` 和 `height` 属性来控制图片显示的尺寸,减少不必要的资源消耗。 3. 懒加载:对于页面上需要加载大量图片的情况,可以考虑使用懒加载技术,即只在可见区域内加载图片。可以通过监听页面的滚动事件,判断图片是否在可见区域内,再进行加载。 4. 预加载:对于一些可能会在后续页面中被使用到的图片,可以提前进行加载,以减少用户等待时间。可以在小程序初始化时或者前一个页面中预先加载后续页面可能会用到的图片。 5. 缓存策略:合理设置图片的缓存策略,利用浏览器缓存机制来提高图片加载速度。可以使用 HTTP 的缓存头信息来控制图片的缓存策略。 6. 使用 WebP 格式:如果小程序的平台支持的话,可以考虑将图片转换为 WebP 格式。WebP 格式相对于 JPEG 和 PNG 格式来说,具有更高的压缩率和更小的文件大小,能够提供更快的加载速度。 7. 图片懒解码:对于一些非关键性的图片,可以延迟解码,即在图片即将进入可视区域时再进行解码。这样可以减少页面初次加载时的解码时间。 综合应用以上优化方式,可以提高小程序中本地图片加载速度和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值