小程序网络大文件缓存方案

server/2025/3/18 8:40:30/

分享一个小程序网络大图加载慢的解决方案

用到的相关api

  1. getSavedFileList 获取已保存的文件列表;
  2. getStorageSync 获取本地缓存
  3. downloadFile 下载网络图片;
  4. saveFile 保存文件到本地;
  5. setStorage 将数据储存到小程序本地缓存

整体思路如下:

先获取已保存的本地文件,如果从来没有保存过,就先下载网络图片并保存到本地,同时将文件路劲缓存小程序,等下次需要的时候直接拿文件路径去匹配本地文件的路径,实现图片秒开的效果;

遗留问题:需要先加载再缓存,初次加载还是会加载比较慢?

代码实现

uni.getSavedFileList({complete: (res)=> {console.log(res)const cacheImgKey = uni.getStorageSync('cacheImgKey')if(res.fileList.length) {const data = res.fileList.find(item=> item.filePath == cacheImgKey)if(data) {this.imagePath = data.filePathreturn}}// 首次加载等待uni.showLoading({title: '加载中...'})uni.downloadFile({url: '要加载的网络文件地址',success: ({ tempFilePath })=> {this.imagePath = tempFilePathuni.saveFile({tempFilePath,success: ({ savedFilePath })=> {this.imagePath = savedFilePath},complete: ()=> {uni.hideLoading()uni.setStorage({key: 'cacheImgKey',data: this.imagePath})}})}})}
})

解决遗留的问题,即 初次加载也能达到秒开的效果,如何处理?

解决方案:可在前置页面预先加载并缓存文件
前置页面判断本地缓存,如果没有可先下载文件保存

const cacheImgKey = uni.getStorageSync('cacheImgKey')
if(!cacheImgKey) {uni.downloadFile({url: '要加载的网络文件地址',success: ({ tempFilePath })=> {uni.saveFile({tempFilePath,success: ({ savedFilePath })=> {uni.setStorage({key: 'cacheImgKey',data: savedFilePath})}})}})
}

END.

如果觉得有用随手点个赞吧,谢谢

关注我,不定时分享技术干货~


http://www.ppmy.cn/server/175917.html

相关文章

电脑自动关机故障维修案例分享

电脑基本配置: C P U: AMD A10 9700 内存:8G 硬盘:金邦512G固态硬盘 主板:华硕 A320M-F 显卡:集成(核心显卡) 操作系统:Win10专业版 故障描述: 使用一段时间会黑屏…

边缘云原生操作系统的设计与思考

资料来源:火山引擎-开发者社区 边缘云行业现状和发展历程 从 06 年 AWS 推出 EC2 、S3 到今天已经过去了 18 年,云计算早已不是一个新鲜词汇,从当前业务来看,我们能看到云计算从中心到中心边缘的发展趋势,为什么会有 这…

4G模组Air780EPM:解锁物联网时代的硬件接口奥秘!

在物联网(IoT)技术飞速发展的当下,通信模组作为连接物理世界与数字网络的“桥梁”,其硬件接口的丰富性与兼容性已成为衡量其竞争力的核心指标。 一、ADC 接口设计指导 Air780EPM 模块(LuatOS 版本)支持 4 路通用 ADC 接口&#x…

SAP-ABAP:SAP锁冲突解决方案:MM_ENQUEUE_DOCUMENT错误处理指南

SAP锁冲突解决方案:MM_ENQUEUE_DOCUMENT错误处理指南 🔍 问题诊断矩阵 症状可能原因检查方法典型场景“Document is locked”用户锁定SM12查看锁持有者多用户同时操作程序异常终止锁未释放ABAP调试检查CALL FUNCTION链未调用DEQUEUE后台作业失败系统残…

【 利用socket来实现简单远控】

利用socket来实现简单远控 🔹 免责声明⚠️ 重要提示一、什么是socket?二、如何使用socket来实现两台计算机之间的通信?服务端1、首先需要创建一个socket;2、绑定IP以及端口3、开启监听4、接受客户端连接5、客户端连接上之后就是命…

vue3之写一个aichat项目------项目初始化

创建项目 1、执行命令 npm create vitelatest2、执行命令后根据需要选择,并执行后续命令 添加ESLint 代码规范 ESLint 文档 ESLint对javascript语法检测、限制和修复,对代码进行格式化,但是不能对css、less等格式化,目的是使…

在1688平台上如何实现铺货和上传商品的自动化?

在1688平台上实现铺货和上传商品的自动化,可以通过以下几种方式来实现: 1. **使用1688开放平台API** 1688提供了开放平台API,允许开发者通过编程接口实现商品上传、库存管理、订单处理等操作。你可以通过以下步骤实现自动化: …

基于MPC8377的MCPU 3U机箱CPCI板卡

板卡简介: 本板为主控板(MCPU),主要负责逻辑控制、数据的处理、板卡的通信管理、系统安全保护切换以及数据存储等功能。 性能规格: 电源:DC5V CPU:MPC8377 核数:单核 32位 主频…