一个好的 app 应该有缓存机制,尤其是网络图片,例如头像之类的。如果没有的话每次页面都要从网络加载,鉴于目前服务器的小水管带宽有限。于是还是加了个缓存功能(闺蜜圈安卓新版本已经加入缓存功能)。
当然,代码还是抄来的,不过稍微改了一下:
const img = { cachingImage: function(filePath) { // #ifdef APP-PLUS const cacheIamge = uni.getStorageSync(filePath) //查看缓存是否有图片资源,没有则下载 if (cacheIamge) { console.log("已缓存为:" + cacheIamge) return cacheIamge // return; } else { //未缓存,进行下载保存 uni.downloadFile({ url: filePath, success: (res) => { if (res.statusCode === 200) { //下载成功 // 再进行本地保存 uni.saveFile({ tempFilePath: res.tempFilePath, success: function(result) { uni.setStorageSync(filePath, result.savedFilePath) }, fail: function(erro) { // console.log('保存失败') } }) } else { // console.log('下载临时文件失败') } }, fail: (res) => { // console.log('下载临时文件失败fail') } }) return filePath } // #endif // #ifndef APP-PLUS return filePath // #endif }, showImage: function(imageUrl) { const url = uni.getStorageSync(imageUrl) return url }, } export default img;
使用的时候直接用cachingImage方法即可,如果没有缓存返回的是 url 路径,如果已经缓存返回的是本地文件路径。
参考链接:https://blog.csdn.net/matchaa__/article/details/132860057
23 comments
厉害
你的 cdn 还没套好啊?
没有呢
赞
我以为图片缓存是系统自动实现的呢
并没有,搜了下发现也有一些插件,但是需要替换 image 标签,就抄了个代码,改了改。
我以为调用了 webview 类似的,然后自动调用浏览器缓存
h5是可以的,基于服务器的缓存策略,但是 app 并不会缓存,需要自己去缓存文件。不然就会每次都从服务器加载。
所以这个缓存使用宏定义包裹了一下,仅对 app 生效
出现了!面相csdn编程
说实话,真不爱看 csdn 的文章,不是针对作者,这个破网站现在是真烂。
确实是这样
这个是小程序嘛
跨平台,支持小程序~~不过这个优化是针对app的。
要不要科普下封装,想学
主要是我代码也是现抄的,哈哈哈。封装不了啊~~
细节满满。
追求极致体验,哈哈哈
确实app内图片要缓存,真为我们用户的流量操心哈
其实流量还好,就是个头像也没多大,但是每次都下载,主要是加载速度有点慢。
项目还是要有缓存功能的,不然每次打开速度都会很慢。
是哒,缓存功能有和没有差别还是比较大的。