IOS编程 图片缓存模块设计
手机客户端为什么会留存下来?而不是被一味的Wap替代掉?因为手机客户端有Wap无可替代的优势,就是自身较强的计算能力。
手机中不可避免的一环:图片缓存,在软件的整个运行过程中显得尤为重要。
先简单说一下图片缓存的作用:
- 提高响应速度
- 减少网络流量
- 提高用户体验
提高响应速度:因为图片一旦缓存在本地之后,那么本地IO数据的读取,远比网络中得IO读取效率要高的多。所以可以提高响应速度
减少网络流量:一张图片在某些情况下,只加载一次,之后便不会重新加载,减少了网络流量。减少流量肯定是必然的。介于国内的流量费用这么贵,是肯定必要的
提高用户体验:这个体验并不仅仅存在于相应速度上,还在一些断网模式上。其实我想说的是。就算是我们的电脑硬盘丢了,我们软件也应该茁壮的运行下去,更何况仅仅是断网而已。
当然这样也会带来弊端:数据同步问题,如果网络中得数据更新了。那么你再本地看到的数据永远都是旧数据。其实我觉得这个问题是一个悖论。减少了网络流量,这种收益,远远大于那些旧数据的问题。当然了,特殊的软件或者某些情况(Wifi)可能会需要数据及时刷新。那么就先加载本地数据。然后从网络中加载数据,替换缓存数据就好了。这个与数据缓存并不冲突。在特殊点,就分时间段过期就好了。比如说,下载一张图片,一小时内有效。如果超过一小时,就认为失效了。虽然慢点,但是我依然看到了最新的数据。至于这些策略问题,要根据不同的情况做最合适的设计,在此不做赘述,如果你有兴趣,我们也可以讨论讨论。
OK,回归正题。说一下我们的缓存模块设计。简单点说,就是把网络中得地址映射到本地目录呗。简单想想,把网络地址中得某些特殊字段替换掉就OK了,比如说 “/”替换成 “_”就可以达到映射的目的了。或者直接直接分录的情况下保存到本地,就Ok了,但是这样会带来其他的不确定的问题(网络地址的长度,如果策略制定的不好,会不会出现缓存错乱的问题。短时间缓存无法实现的问题等等)。我的做法是这样的,将网络地址中得连接,直接跟本地的某一个唯一缓存地址建立映射关系。并且连同创建时间保存到数据库中。这样就可以做到上述的所有的缓存效果了。
先放个思路上来,如果需要代码的话。等之后再说。
对了,有一个细节的地方没有说,怎么生成本地唯一的地址呢?有以下几种方式参考
- 获取时间作为标示:(不怎么安全,有可能会出现同时好几个)
- 随机数:(不怎么安全,有可能会摇号到同一个数)
- ID生成器:专门用户生成唯一Id的组件:http://www.cnblogs.com/anxin1225/p/3660506.html
顺手贴上我们的官网地址:http://www.jinhusns.com
欢迎转载,但是请标注上原文地址