uniApp图片加载慢怎么办

1. 前言

uniApp是近年来非常流行的一款多端开发框架,可以同时开发小程序、H5、APP等多个平台。然而,在开发过程中,我们可能会遇到一些图片加载缓慢的问题,影响用户体验。本文将介绍一些解决uniApp图片加载慢问题的方法。

2. 常见原因

在解决问题之前,我们需要了解一些导致图片加载慢的常见原因。

2.1 图片过大

如果你的图片尺寸过大,那么加载时间就会过长。具体的解决方法有以下几种:

缩小图片尺寸

通过图片压缩工具压缩图片大小

2.2 网络问题

网络问题也是常见的一个原因,如果用户的网络环境太差,那么可能会导致图片加载速度变慢。此时我们可以通过以下方法解决:

使用图片CDN加速

使用WebP格式替代jpg和png格式

2.3 JS代码问题

如果你的JS代码中存在不合理的逻辑,那么也会导致图片加载缓慢。例如:某张图片需要在用户点击之后才会加载,但是你却在页面初次加载时就加载了该图片。此时我们可以进行如下优化:

对图片进行懒加载,即只有当用户需要时才会加载

预加载,即在页面初次加载时就将全部图片加载好

3. 解决方式

3.1 图片懒加载

图片懒加载,顾名思义,就是将一些需要较长时间才能载入的图片放到一个后台加载中,等到用户需要访问它们时再动态的载入。

uniApp中免费的轮廓(lowPolyImage)组件支持懒加载,只需要将图片的地址放到data中,然后将img标签的src属性替换为:src="lowPolyImage"即可实现图片懒加载。

//HTML

<template>

<view class="uni-padding-wrap">

<image v-for="(item,index) in images" :src="lowPolyImage" width="300rpx" style="margin-right:10rpx;margin-bottom:10rpx;" />

</view>

</template>

//JS

<script>

export default {

data() {

return {

lowPolyImage: '',

images: [

'https://img.yzcdn.cn/vant/cat.jpeg',

'https://img.yzcdn.cn/vant/camel.jpeg',

'https://img.yzcdn.cn/vant/dolphin.jpeg',

'https://img.yzcdn.cn/vant/fish.jpeg',

]

};

},

mounted() {

const lowPolyImage = uni.requireNativePlugin('lowPolyImage');

lowPolyImage.init(

{

quality: 30,

stroke: 3

},

(result) => {

this.lowPolyImage = `lowpolyimage://${result.code}`;

}

);

}

};

</script>

低多边形插件可以实现将图片转换为低多边形图像,节省原图片大小,由于图片小,网络请求速度就会变快,同时,低多边形效果可以为页面增色。

3.2 图片预加载

预先加载图片是指用户在当前页面活跃时,提前将需要使用到的图片加载并缓存,可以加速页面的访问。在uniApp中可以使用uni.request或者uni.downloadFile方法提前将图片下载到本地缓存,再在页面渲染时使用本地缓存。

3.2.1 uni.request方法

//实例代码

//预加载图片到缓存

let imgUrl = 'https://cn.vuejs.org/images/logo.png';

uni.request({

url: imgUrl,

method: 'GET',

responseType:'arraybuffer',

success: (response) => {

var imgData = 'data:image/jpeg;base64,' + uni.arrayBufferToBase64(response.data);

wx.setStorage({

key:'imgPreload',

data: imgData

})

}

})

//使用图片缓存

<template>

<image :src="'/storage/emulated/0/Android/data/io.dcloud.h5c6790d5/caches/img/test.png'" />

</template>

3.2.2 uni.downloadFile方法

//实例代码

//预加载图片到缓存

let imgUrl = 'https://cn.vuejs.org/images/logo.png';

uni.downloadFile({

url:imgUrl,

success:function(res){

let path = res.tempFilePath;

wx.setStorage({

key:'imgPreload',

data:path

});

}

})

//使用图片缓存

<template>

<image :src="'/storage/emulated/0/Android/data/io.dcloud.h5c6790d5/caches/img/test.png'" />

</template>

使用本地缓存的图片可以提高图片渲染速度,但是缓存的文件会占用本地存储空间,需要注意存储空间的大小。

3.3 图片CDN加速

使用图片CDN加速可以将你的图片资源分发到全球多个加速节点上,让用户就近获取图片资源,减小网络传输时间,提升图片加载速度。在uniApp中使用CDN加速,需要在HBuilderX中配置,在manifest.json文件中配置AppPlus -> crossorigin属性等参数。

//manifest.json文件中配置

"AppPlus": {

"name":"uni-app",

"version":"1.0.0",

"description":"APP打包模板",

"type":"ios",

"minSdkVersion":"1.0.0",

"backgroundMode":"none",

"useWebview":true,

"titleNView":{

"titleText":"行车轨迹记录"

},

"crossorigin":"anonymous",//加入此属性,默认请求会带有referer信息,若业务线要自行处理鉴权,则需要把此属性设置成禁止携带referer

"cloud": true

}

同时,在上传图片到CDN上之前,我们需要对图片进行压缩,减小图片文件大小,以节省带宽资源。压缩图片可以使用类似TinyPNG或ImageOptim等的在线工具,也可以使用ImageMagick或GraphicsMagick等本地工具进行批量处理。压缩后的图片会降低图片的精确度,但人眼无法区分,不会影响图片的显示效果。

3.4 使用WebP格式

WebP是由Google开发的一种能减少图片文件大小的图片格式,与JPEG和PNG格式相比,WebP格式的图片大小可以缩小25%至35%。在uniApp中,使用WebP格式的图片可以通过以下方式实现。

使用Image Processor插件实现WebP格式的图片处理。

使用自定义构建的方式,通过vue-cli-plugin-uni-optimize压缩图片,减小文件大小。

4. 总结

在开发过程中,为了提高用户体验,我们需要关注图片加载速度。通过合理地使用懒加载、预加载、CDN加速以及WebP格式,可以有效地提高图片加载速度,从而提升应用的性能和用户满意度。