当前位置: 首页 > news >正文

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

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

用到的相关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.filePath
				return
			}
		}

		// 首次加载等待
		uni.showLoading({
			title: '加载中...'
		})
		uni.downloadFile({
			url: '要加载的网络文件地址',
			success: ({ tempFilePath })=> {
				this.imagePath = tempFilePath
				uni.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.

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

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

相关文章:

  • 5-27 临摹大师-IP-Adapter
  • DataGear部署文档(基于openeuler)
  • Android头像布局
  • 谷歌Gemma 3:开启AI新纪元的强大引擎
  • Secure and Privacy-Preserving Decentralized Federated Learning同态加密联邦学习文献阅读
  • 缓存和客户端数据存储体系(Ark Data Kit)--- 应用数据持久化(首选项持久化、K-V、关系型数据库)持续更新中...
  • 华三交换机配置流桶(通常称为“流策略”或“流行为”)
  • 基于javaweb的SpringBoot个人健康管理系统小程序微信小程序设计与实现(源码+文档+部署讲解)
  • C#中除了Dictionary,List,HashSet,HashTable 还有哪些可以保存列表的数据类型?
  • 247g 的工业级电调,如何让无人机飞得更 “聪明“?——STONE 200A-M 深度测评
  • Linux练级宝典->进程间通信
  • 卷积神经网络(笔记03)
  • 缓存及其问题解决
  • linux中yum和wget指令的区别
  • 【目标检测】【CVPR 2025】DEIM:具有改进匹配机制的DETR以实现快速收敛
  • 【fnOS飞牛云NAS本地部署跨平台视频下载工具MediaGo与远程访问下载视频流程】
  • 001 | How To Take Study Notes:五种做笔记的方法(中英)
  • 【Node】Node.js环境变量配置,及下载地址
  • SpringBoot动态加载JAR包实战:实现插件化架构的终极指南
  • RHCE(RHCSA复习:虚拟的安装和设置)
  • 芜湖做网站公司/企业seo排名有 名
  • 哪个网站可以做翻译赚钱/网上营销的方式
  • 开发流程图/免费seo软件推荐
  • 新闻网站排行榜/百度霸屏推广多少钱一个月
  • 西安到北京飞机/网站seo是什么意思
  • 男女做污视频在线观看网站/武汉网站搜索引擎优化