news 2026/6/10 23:31:31

实现图片本地缓存,减少url重复请求

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
实现图片本地缓存,减少url重复请求

缓存实现代码

/** * 全能型获取图片缓存 (兼容单个链接与链接数组 + 秒开优化) */ export function getImageStorage(url) { return new Promise((resolve) => { // 1. 如果是数组,通过 map 循环调用自身,并用 Promise.all 等待所有结果 if (Array.isArray(url)) { Promise.all(url.map(item => getImageStorage(item))) .then(results => resolve(results)) .catch(() => resolve(url)); // 异常兜底,返回原数组 return; } // 2. 单个链接处理逻辑 if (!url) { resolve(''); return; } // 智能处理 baseUrl 拼接(防止完整的 http/https 链接被重复拼接) // 注意:请确保你的工具文件里已经定义了 baseUrl,如果 url 已经是完整链接则不拼接 const fullUrl = (url.startsWith('http://') || url.startsWith('https://')) ? url : (typeof baseUrl !== 'undefined' ? baseUrl + url : url); // 提取文件名作为缓存 key(兼容带参数的 OSS 链接) const pathWithoutQuery = fullUrl.split('?')[0]; const fullFileName = pathWithoutQuery.substring(pathWithoutQuery.lastIndexOf('/') + 1); const fileNameWithoutExt = fullFileName.substring(0, fullFileName.lastIndexOf('.')) || fullFileName; const storageKey = "IMG_CACHE_" + fileNameWithoutExt; // 本地文件路径缓存 key const urlCacheKey = "URL_CACHE_" + fileNameWithoutExt; // 网络链接兜底缓存 key // --- 核心秒开逻辑:优先读取本地缓存的下载路径 --- const localUrl = uni.getStorageSync(storageKey); if (localUrl) { uni.setStorageSync(urlCacheKey, fullUrl); // 顺便更新一下网络链接缓存 resolve(localUrl); return; } // --- 核心秒开逻辑:如果没有本地文件,看看有没有缓存的网络链接 --- const cachedUrl = uni.getStorageSync(urlCacheKey); if (cachedUrl) { resolve(cachedUrl); // 立刻返回缓存的链接,让页面先渲染出来(实现秒开) } // 3. 执行下载和持久化缓存逻辑 // #ifndef H5 uni.downloadFile({ url: fullUrl, success: (res) => { if (res.statusCode === 200) { const saveSuccess = (savedFilePath) => { uni.setStorageSync(storageKey, savedFilePath); uni.setStorageSync(urlCacheKey, fullUrl); resolve(savedFilePath); }; const saveFail = () => resolve(fullUrl); // 失败兜底返回原链接 // #ifndef MP-WEIXIN || MP-KUAISHOU uni.saveFile({ tempFilePath: res.tempFilePath, success: (r) => saveSuccess(r.savedFilePath), fail: saveFail }); // #endif // #ifdef MP-WEIXIN wx.getFileSystemManager().saveFile({ tempFilePath: res.tempFilePath, success: (r) => saveSuccess(r.savedFilePath), fail: saveFail }); // #endif // #ifdef MP-KUAISHOU ks.saveFile({ tempFilePath: res.tempFilePath, success: (r) => saveSuccess(r.savedFilePath), fail: saveFail }); // #endif } else { resolve(fullUrl); } }, fail: () => resolve(fullUrl), }) // #endif // #ifdef H5 // H5端 fetchBlobDataAsBase64 逻辑(需确保你文件里有这个辅助函数) fetchBlobDataAsBase64(fullUrl) .then(base64Data => { const [header, data] = base64Data.split(','); const mimeType = header.match(/:(.*?);/)[1]; const base64 = `data:${mimeType};base64,${data}`; uni.setStorageSync(storageKey, base64); uni.setStorageSync(urlCacheKey, fullUrl); resolve(base64); }) .catch(() => resolve(fullUrl)) // #endif }); } // H5端辅助函数 function fetchBlobDataAsBase64(blobUrl) { return new Promise((resolve, reject) => { fetch(blobUrl) .then(response => response.blob()) .then(blob => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.onerror = () => reject(new Error('无法读取文件')); reader.readAsDataURL(blob); }) .catch(error => reject(error)); }); }

使用方法

引入方法--import {getImageStorage} from '../../../util/chatImage.js',根据实际项目写入正确路劲。

在首次获取图片资源的时候调用方法,实现数据缓存this.rulesImageUrl = await getImageStorage(res.data.rulesImageUrl);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 23:27:08

2026年实测AI论文网站指南(合规高效版)

为解决学术写作中效率与合规两大核心痛点,本文精选8款高适配性AI论文写作工具(按综合优先级排序),围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度进行测评,同时配套分场景精准选型方案与学…

作者头像 李华
网站建设 2026/6/10 23:19:58

# AI Agent从0到1开发学习:【什么是多路召回?具体怎么做?】

本文是【AI Agent从0到1开发学习】专栏系列文章,更多内容持续更新中,文章内容基于作者本人理解与实践,如有纰漏与错误等问题,烦请告知,欢迎关注交流! 先用一句话回答: 多路召回,就是…

作者头像 李华
网站建设 2026/6/10 23:17:12

效率直接起飞!盘点2026年人气爆表的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的AI论文写作工具神器,覆盖全流程生成、文献处理、降重润色、格式排版四大核心场景,帮你高效搞定毕业论文。 一、全流程王者:一站式搞定论文全链路&#xff08…

作者头像 李华
网站建设 2026/6/10 23:15:17

告别Token烧钱焦虑!「秒云Tokens管家」智能预警,筑牢AI成本防线

近期,米哈游一夜间烧掉价值200万元Token、Uber提前耗尽年度AI预算、Meta单月Token消耗成本超亿美元等事件频发引起行业热议,企业盲目追求“Tokenmaxxing"(最大化Token使用量)却难以将高额消耗转化为实际价值,AI算…

作者头像 李华
网站建设 2026/6/10 23:15:10

新用户第1天 vs 第30天:政策推荐系统的“学习曲线”

一组真实数据。 某政策信息平台(政策快报平台)的内部统计显示: 新用户注册第1天:推荐政策的点击率约为12% 使用30天后:推荐政策的点击率上升到34% 使用90天后:推荐政策的点击率稳定在38%-42% 点击率从…

作者头像 李华
网站建设 2026/6/10 23:11:44

PLGA包载紫杉醇PTX,PTX@PLGA微球 粒径100nm-200nm

PTXPLGA 微球(PLGA 包载紫杉醇微球) 以PLGA为可降解载体、紫杉醇 (PTX)为疏水抗肿瘤药物的缓释微球递送体系,多用于肿瘤局部化疗、长效缓释、降低毒副作用,是抗肿瘤微球制剂经典体系。 一、原料基础特性 PLGA 生物相容、体内可…

作者头像 李华