手机客户端为什么会留存下来?而不是被一味的Wap替代掉?因为手机客户端有Wap无可替代的优势,就是自身较强的计算能力。

手机中不可避免的一环:图片缓存,在软件的整个运行过程中显得尤为重要。

先简单说一下图片缓存的作用:

  1. 提高响应速度
  2. 减少网络流量
  3. 提高用户体验

提高响应速度:因为图片一旦缓存在本地之后,那么本地IO数据的读取,远比网络中得IO读取效率要高的多。所以可以提高响应速度

减少网络流量:一张图片在某些情况下,只加载一次,之后便不会重新加载,减少了网络流量。减少流量肯定是必然的。介于国内的流量费用这么贵,是肯定必要的

提高用户体验:这个体验并不仅仅存在于相应速度上,还在一些断网模式上。其实我想说的是。就算是我们的电脑硬盘丢了,我们软件也应该茁壮的运行下去,更何况仅仅是断网而已。

当然这样也会带来弊端:数据同步问题,如果网络中得数据更新了。那么你再本地看到的数据永远都是旧数据。其实我觉得这个问题是一个悖论。减少了网络流量,这种收益,远远大于那些旧数据的问题。当然了,特殊的软件或者某些情况(Wifi)可能会需要数据及时刷新。那么就先加载本地数据。然后从网络中加载数据,替换缓存数据就好了。这个与数据缓存并不冲突。在特殊点,就分时间段过期就好了。比如说,下载一张图片,一小时内有效。如果超过一小时,就认为失效了。虽然慢点,但是我依然看到了最新的数据。至于这些策略问题,要根据不同的情况做最合适的设计,在此不做赘述,如果你有兴趣,我们也可以讨论讨论。

OK,回归正题。说一下我们的缓存模块设计。简单点说,就是把网络中得地址映射到本地目录呗。简单想想,把网络地址中得某些特殊字段替换掉就OK了,比如说 “/”替换成 “_”就可以达到映射的目的了。或者直接直接分录的情况下保存到本地,就Ok了,但是这样会带来其他的不确定的问题(网络地址的长度,如果策略制定的不好,会不会出现缓存错乱的问题。短时间缓存无法实现的问题等等)。我的做法是这样的,将网络地址中得连接,直接跟本地的某一个唯一缓存地址建立映射关系。并且连同创建时间保存到数据库中。这样就可以做到上述的所有的缓存效果了。

先放个思路上来,如果需要代码的话。等之后再说。

对了,有一个细节的地方没有说,怎么生成本地唯一的地址呢?有以下几种方式参考

  1. 获取时间作为标示:(不怎么安全,有可能会出现同时好几个)
  2. 随机数:(不怎么安全,有可能会摇号到同一个数)
  3. ID生成器:专门用户生成唯一Id的组件:http://www.cnblogs.com/anxin1225/p/3660506.html

顺手贴上我们的官网地址:http://www.jinhusns.com

欢迎转载,但是请标注上原文地址

IOS编程 图片缓存模块设计的更多相关文章

  1. .NET 缓存模块设计

    上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践. 基本的缓存模块设计 最基础的缓存模块一定有一个统一的CacheHelper,如下: public interf ...

  2. iOS高性能图片架构与设计

    版权声明:本文由柯灵杰原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/157 来源:腾云阁 https://www.qclo ...

  3. IOS把图片缓存到本地的几种方法

    把图片缓存到本地,在很多场景都会用到,如果是只储存文字信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存图片到沙盒就没那么方便了.这里介绍两种保存图片到沙盒的方法. 一.把图片转 ...

  4. Fast Image Cache – iOS 应用程序高性能图片缓存

    Fast Image Cache 是一种在 iOS 应用程序中高效.持续.超快速的存储和检索图像的解决方案.任何良好的 iOS 应用程序的用户体验都应该是快速,平滑滚动的,Fast Image Cac ...

  5. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化   在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...

  6. iOS图片缓存框架SDWebImage

    本文转发至: http://blog.csdn.net/uxyheaven/article/details/7909373 http://www.cocoachina.com/ios/20141212 ...

  7. iOS的图片:解码(CPU)与内存(缓存)

    图片的数据:资源数据(地址).原始数据(Data).显示数据(解码后的数据) 解压图片 - PNG或者JPEG压缩之后的图片文件会比同质量的位图小得多.但是在图片绘制到屏幕上之前,必须把它扩展成完整的 ...

  8. ios开发清除SDWebImage图片缓存

    一:一般在实际的项目应用中都会用到第三方框架SDWebImage去下载缓存图片,但在ios开发应用中,常常涉及对SDWebImage缓存图片的清除.本文所列出代码即是对SDWebImage缓存图片的清 ...

  9. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

随机推荐

  1. 作业七:团队项目——Alpha版本冲刺阶段-12

    今日编写代码如下: class ChessRule { /**卒子的移动规则*/ public void armsRule(int Man,JLabel play,MouseEvent me){ // ...

  2. Programming Erlang 学习笔记(一)

    入门 启动Shell 在cmd中输入命令”erl”,百分号(%)表示一个注释的开始,从百分号开始到这行结束的所有文本都被看做是注释. 一个完整的命令需要以一个句点和一个回车结束. 退出erlang的命 ...

  3. HTML5文件上传插件 Huploadify V2.1发布

    月初发布了HUploadify2.0版本,增加了文件的断点续传功能,得到了不少朋友的好评.本着按照Uploadify原样复制的原则,本次在一些朋友的建议中采纳了几点,做了一次较小的改动,定为2.1版本 ...

  4. Java提高篇(三四)-----fail-fast机制

    在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...

  5. HOOK技术的一些简单总结

    好久没写博客了, 一个月一篇还是要尽量保证,今天谈下Hook技术. 在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常 ...

  6. Yii Model中添加默认搜索条件

    在查询中增加条件 public function defaultScope() { return array( 'condition' => " is_deleted = 0" ...

  7. Java 9终于要包含Jigsaw项目了

    当Jigsaw在Java 9中最终发布时,这个项目的历史已经超过八年了. 转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/180.html? ...

  8. struts2学习笔记之十一:struts2的类型转换器

    Struts2的类型转换器   如何实现Struts2的类型转换器? * 继承StrutsTypeConverter * 覆盖convertFromString和convertToString   注 ...

  9. Atitti css transition Animation differ区别

    Atitti  css   transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限.  1 1.2. Transition ...

  10. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...