赞
踩
微信小程序中的多图列表页面性能问题主要是由于以下几个原因导致的:
以下介绍7种方法(图片懒加载、图片压缩、分页加载、WebP 格式图片、CDN 加速、缓存、虚拟列表)来解决多图列表页面性能问题,示例代码如下:
Page({ data: { images: [] }, onLoad() { const observer = wx.createIntersectionObserver(this, { observeAll: true }) observer.relativeTo('.scroll-view') observer.observe('.image', res => { res.forEach(item => { if (item.isIntersecting) { const index = item.dataset.index const image = this.data.images[index] this.setData({ [`images[${index}].src`]: image.url }) } }) }) } })
Page({ data: { images: [] }, onLoad() { wx.getImageInfo({ src: 'https://example.com/image.jpg', success: res => { wx.compressImage({ src: res.path, quality: 80, success: res => { this.setData({ images: [res.tempFilePath] }) } }) } }) } })
Page({ data: { images: [], page: 1, size: 10 }, onLoad() { this.loadImages() }, onReachBottom() { this.setData({ page: this.data.page + 1 }, () => { this.loadImages() }) }, loadImages() { wx.request({ url: 'https://example.com/images', data: { page: this.data.page, size: this.data.size }, success: res => { this.setData({ images: this.data.images.concat(res.data.images) }) } }) } })
<image src="https://example.com/image.webp" mode="widthFix"></image>
<image src="https://cdn.example.com/image.jpg" mode="widthFix"></image>
wx.getImageInfo({ src: 'https://example.com/image.jpg', success: res => { wx.setStorageSync('image', res.path) } }) // 使用缓存 const image = wx.getStorageSync('image') if (image) { this.setData({ images: [image] }) } else { // 加载图片 }
<scroll-view scroll-y="true" bindscrolltolower="onReachBottom">
<view wx:for="{{visibleImages}}" wx:key="index">
<image src="{{item.src}}" mode="widthFix"></image>
</view>
</scroll-view>
Page({ data: { images: [], visibleImages: [], start: 0, end: 10 }, onLoad() { wx.getSystemInfo({ success: res => { this.setData({ windowHeight: res.windowHeight }) } }) this.loadImages() }, onReachBottom() { this.setData({ end: this.data.end + 10 }, () => { this.loadImages() }) }, loadImages() { const images = this.data.images.slice(this.data.start, this.data.end) this.setData({ visibleImages: images }) }, handleScroll(event) { const scrollTop = event.detail.scrollTop const start = Math.floor(scrollTop / this.data.windowHeight) * 10 const end = start + 10 this.setData({ start: start, end: end }, () => { this.loadImages() }) } })
总结:在多图列表页面中,可以使用 图片懒加载、图片压缩、分页加载、WebP 格式图片、CDN 加速、缓存、虚拟列表等技术来优化页面性能,提高用户体验。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。