IOS编程 图片缓存模块设计
手机客户端为什么会留存下来?而不是被一味的Wap替代掉?因为手机客户端有Wap无可替代的优势,就是自身较强的计算能力。
手机中不可避免的一环:图片缓存,在软件的整个运行过程中显得尤为重要。
先简单说一下图片缓存的作用:
- 提高响应速度
- 减少网络流量
- 提高用户体验
提高响应速度:因为图片一旦缓存在本地之后,那么本地IO数据的读取,远比网络中得IO读取效率要高的多。所以可以提高响应速度
减少网络流量:一张图片在某些情况下,只加载一次,之后便不会重新加载,减少了网络流量。减少流量肯定是必然的。介于国内的流量费用这么贵,是肯定必要的
提高用户体验:这个体验并不仅仅存在于相应速度上,还在一些断网模式上。其实我想说的是。就算是我们的电脑硬盘丢了,我们软件也应该茁壮的运行下去,更何况仅仅是断网而已。
当然这样也会带来弊端:数据同步问题,如果网络中得数据更新了。那么你再本地看到的数据永远都是旧数据。其实我觉得这个问题是一个悖论。减少了网络流量,这种收益,远远大于那些旧数据的问题。当然了,特殊的软件或者某些情况(Wifi)可能会需要数据及时刷新。那么就先加载本地数据。然后从网络中加载数据,替换缓存数据就好了。这个与数据缓存并不冲突。在特殊点,就分时间段过期就好了。比如说,下载一张图片,一小时内有效。如果超过一小时,就认为失效了。虽然慢点,但是我依然看到了最新的数据。至于这些策略问题,要根据不同的情况做最合适的设计,在此不做赘述,如果你有兴趣,我们也可以讨论讨论。
OK,回归正题。说一下我们的缓存模块设计。简单点说,就是把网络中得地址映射到本地目录呗。简单想想,把网络地址中得某些特殊字段替换掉就OK了,比如说 “/”替换成 “_”就可以达到映射的目的了。或者直接直接分录的情况下保存到本地,就Ok了,但是这样会带来其他的不确定的问题(网络地址的长度,如果策略制定的不好,会不会出现缓存错乱的问题。短时间缓存无法实现的问题等等)。我的做法是这样的,将网络地址中得连接,直接跟本地的某一个唯一缓存地址建立映射关系。并且连同创建时间保存到数据库中。这样就可以做到上述的所有的缓存效果了。
先放个思路上来,如果需要代码的话。等之后再说。
对了,有一个细节的地方没有说,怎么生成本地唯一的地址呢?有以下几种方式参考
- 获取时间作为标示:(不怎么安全,有可能会出现同时好几个)
- 随机数:(不怎么安全,有可能会摇号到同一个数)
- ID生成器:专门用户生成唯一Id的组件:http://www.cnblogs.com/anxin1225/p/3660506.html
顺手贴上我们的官网地址:http://www.jinhusns.com
欢迎转载,但是请标注上原文地址
IOS编程 图片缓存模块设计的更多相关文章
- .NET 缓存模块设计
上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践. 基本的缓存模块设计 最基础的缓存模块一定有一个统一的CacheHelper,如下: public interf ...
- iOS高性能图片架构与设计
版权声明:本文由柯灵杰原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/157 来源:腾云阁 https://www.qclo ...
- IOS把图片缓存到本地的几种方法
把图片缓存到本地,在很多场景都会用到,如果是只储存文字信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存图片到沙盒就没那么方便了.这里介绍两种保存图片到沙盒的方法. 一.把图片转 ...
- Fast Image Cache – iOS 应用程序高性能图片缓存
Fast Image Cache 是一种在 iOS 应用程序中高效.持续.超快速的存储和检索图像的解决方案.任何良好的 iOS 应用程序的用户体验都应该是快速,平滑滚动的,Fast Image Cac ...
- iOS网络加载图片缓存策略之ASIDownloadCache缓存优化
iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...
- iOS图片缓存框架SDWebImage
本文转发至: http://blog.csdn.net/uxyheaven/article/details/7909373 http://www.cocoachina.com/ios/20141212 ...
- iOS的图片:解码(CPU)与内存(缓存)
图片的数据:资源数据(地址).原始数据(Data).显示数据(解码后的数据) 解压图片 - PNG或者JPEG压缩之后的图片文件会比同质量的位图小得多.但是在图片绘制到屏幕上之前,必须把它扩展成完整的 ...
- ios开发清除SDWebImage图片缓存
一:一般在实际的项目应用中都会用到第三方框架SDWebImage去下载缓存图片,但在ios开发应用中,常常涉及对SDWebImage缓存图片的清除.本文所列出代码即是对SDWebImage缓存图片的清 ...
- iOS开发--基于AFNetWorking3.0的图片缓存分析
图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...
随机推荐
- 给Java程序猿们推荐一些值得一看的好书
学习的最好途径就是看书 "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的 ...
- 基础调试命令 - u/ub/uf
在调试过程中难免会遇到需要反编译代码来分析逻辑的时候,在windbg中,需要反编译代码就要用到u/ub/uf这三个命令.本文这里分别介绍这三个命令各自的用途. 以下是一个quick sort的实例代码 ...
- Java提高篇(三四)-----fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...
- JavaScript高级-定义函数(类)方法
1.定义普通函数(常用) //1.普通函数 function defineFun1(p1, p2) { return p1 + p2; } 2.定义匿名函数(最常用) //2.匿名函数 var def ...
- MyBatis学习总结(六)——调用存储过程
一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_ ...
- Atiti attilax主要成果与解决方案与案例rsm版 v2
Atiti attilax主要成果与解决方案与案例rsm版 v2 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程与培训系列1 #-----组织运营与文化建设系列1 # ...
- PHP面向对象 三大特性
1.封装 目的:就是为了让类更加安全 做法: 1 要将成员做成私有的 2 在类里面做方法来间接访问成员变量 3 在方法里面加控制 简单的: 第一个魔术方法:给变量赋值的 __set fu ...
- D3+svg 案例
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- pycharm快捷键 - 官方全
pycharm快捷键 - 官方全 Ctrl + F12 显示文件内的成员,继承的成员
- vue-cli创建项目