微信小程序多图列表页面性能问题为什么会出现?如何解决?

这篇具有很好参考价值的文章主要介绍了微信小程序多图列表页面性能问题为什么会出现?如何解决?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序中的多图列表页面性能问题主要是由于以下几个原因导致的:

  1. 图片过大:在多图列表页面中,如果图片过大,会导致页面加载时间过长,从而影响用户体验。
  2. 请求过多:在多图列表页面中,如果一次请求加载过多的图片,会导致请求次数过多,从而影响页面加载速度。
  3. 内存占用过高:在多图列表页面中,如果一次性加载过多的图片,会导致内存占用过高,从而影响页面的运行稳定性。

以下介绍7种方法(图片懒加载、图片压缩、分页加载、WebP 格式图片、CDN 加速、缓存、虚拟列表)来解决多图列表页面性能问题,示例代码如下:

  1. 图片懒加载:在多图列表页面中,可以使用图片懒加载技术,只在用户需要查看图片时才加载图片,从而减少请求次数,提高页面加载速度。以下是使用 wx.createIntersectionObserver 实现图片懒加载的代码示例:
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
          })
        }
      })
    })
  }
})
  1. 图片压缩:在多图列表页面中,可以使用图片压缩技术,将图片压缩到适当的大小,从而减少图片加载时间。以下是使用 wx.compressImage 实现图片压缩的代码示例:
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]
            })
          }
        })
      }
    })
  }
})
  1. 分页加载:在多图列表页面中,可以使用分页加载技术,每次只加载一部分图片,从而减少内存占用,提高页面运行稳定性。以下是使用 wx.request 实现分页加载的代码示例:
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)
        })
      }
    })
  }
})
  1. 使用 WebP 格式图片:WebP 是一种新一代图片格式,它具有更好的压缩算法,可以在不损失图片质量的情况下减小图片大小。以下是使用 WebP 格式图片的代码示例:
<image src="https://example.com/image.webp" mode="widthFix"></image>
  1. 使用 CDN 加速:CDN 是一种分布式网络,可以将静态资源分发到最近的节点,从而提高资源加载速度。以下是使用 CDN 加速的代码示例:
<image src="https://cdn.example.com/image.jpg" mode="widthFix"></image>
  1. 使用缓存:缓存是一种临时存储技术,可以将频繁访问的资源存储在本地,从而减少网络请求次数。以下是使用缓存的代码示例:
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 {
  // 加载图片
}
  1. 使用虚拟列表:虚拟列表是一种列表渲染技术,它只渲染可见区域内的列表项,从而减少内存占用,提高页面运行稳定性。以下是使用虚拟列表的代码示例:
<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 加速、缓存、虚拟列表等技术来优化页面性能,提高用户体验。文章来源地址https://www.toymoban.com/news/detail-843214.html

到了这里,关于微信小程序多图列表页面性能问题为什么会出现?如何解决?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp 微信小程序 Picker下拉列表数据回显问题

    效果图: 1、template 2、data 3、methods

    2024年02月16日
    浏览(18)
  • 解决微信小程序页面滚动穿透问题

    先来描述一下具体什么是滚动穿透行为,假设现在有一个长列表,可以上下滚动查看更多内容,假如我们点击一个删除按钮,会弹出一个确认弹框,这时我们如果上下滑动页面的话会发现弹框底下的列表内容依然可以上下滚动,如下所示: Video_2022-12-02_111109 这样的体验效果并

    2024年02月13日
    浏览(25)
  • 微信小程序单图上传和多图上传

    图片上传主要用到 1、wx.chooseImage(Object object) 从本地相册选择图片或使用相机拍照。 Object object 属性 类型 默认值 必填 说明 count number 9 否 最多可以选择的图片张数 sizeType Array.string [\\\'original\\\', \\\'compressed\\\'] 否 所选的图片的尺寸 sourceType Array.string [\\\'album\\\', \\\'camera\\\'] 否 选择图片的来源

    2024年02月03日
    浏览(30)
  • uView2.0 ScrollList 横向滚动列表微信小程序不滚动问题

    1.1 template 1.2 style(scss) 1.3 问题截图 2.1 解决办法 在 u-scroll-list 内部只放一个盒子,盒子内部包裹横向滚动列表项,并且盒子设置 display:flex; 2.2 template 2.3 style(scss) 2.4 解决截图

    2024年02月11日
    浏览(26)
  • uniapp微信小程序 页面返回使用navigateBack,返回后页面不刷新问题解决方案

    尝试了众多方法,比如vuex,本地缓存,都不行 1,如果是页面之间的跳转 可以使用onShow生命周期请求数据 2,组件之间的跳转,使用redirectTo,通过关闭当前页面,跳转到指定页面再加载,这种适合二级页面到三级页面数据不更新问题 3,当一级页面使用了某个组件,组件内跳转

    2024年02月15日
    浏览(29)
  • 解决微信小程序自定义tabbar跳转页面图标闪动问题

    情况一    如果你的tabbar对应的页面是component,那就在component下面加上 其中的selected是该tab页面对应的索引值 情况二    如果你的tabbar对应的页面是page,那就将上面的if判断写在page的onshow里面 闪动问题就解决啦~

    2024年02月12日
    浏览(38)
  • Echarts微信小程序中条形图上下滑动引起页面滚动问题

    先看条形图 如图所示是,echarts中典型的横向柱状图(条形图) 需求:可以让图形进行放大缩小,并且放大后可上下滚动查看; 主要问题:放大图表之后,手指上下滑动会引起页面整体滚动,影响数据查看体验 PS:看了很多方案,有 直接修改源码 阻止touchstart、touchmove、to

    2024年04月17日
    浏览(38)
  • 微信小程序webview嵌入H5页面,返回 UniAppJSBridgeReady,不触发问题

    公司的一个项目,要求用微信小程序实现对pdf文件,预览签字,用的uniapp开发 pdf预览这部分,用的pdf.js插件实现。 由于微信小程序中webview展示页面不能放在项目本地,要求远端请求网页。而且webview会铺满整个页面,导致我的签字按钮只能放在远端的H5页面实现,当时因为偷

    2024年02月15日
    浏览(25)
  • 微信小程序使用webview内嵌h5页面 wx.miniProgram.getEnv失效问题

    背景 最近接到一个h5需求,和普通的h5不一样,这个h5页面是嵌入到小程序中使用的,需求简单来说就是展示一个跳转按钮,判断如果是小程序环境下就进行跳转到其他小程序页面。 实现思路 核心逻辑其实就是判断小程序环境这一块,我们可以直接使用wxsdk来进行判断小程序

    2024年02月09日
    浏览(28)
  • 微信小程序页面交互综合练习 (重点:解决“setData of undefined”报错问题)

    (1)首先,我需要在vscode里面创建一个简易的node.js服务器 (2)然后,需要在微信小程序开发工具的index.wxml里写一个注册表单 页面如下: (3)最后在index.js里面给绑定的函数写上执行代码: (4)代码运行结果: 我在vscode中运行创建服务器代码 当我填好表单数据点击提交

    2024年04月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包