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 ...
随机推荐
- 作业七:团队项目——Alpha版本冲刺阶段-12
今日编写代码如下: class ChessRule { /**卒子的移动规则*/ public void armsRule(int Man,JLabel play,MouseEvent me){ // ...
- Programming Erlang 学习笔记(一)
入门 启动Shell 在cmd中输入命令”erl”,百分号(%)表示一个注释的开始,从百分号开始到这行结束的所有文本都被看做是注释. 一个完整的命令需要以一个句点和一个回车结束. 退出erlang的命 ...
- HTML5文件上传插件 Huploadify V2.1发布
月初发布了HUploadify2.0版本,增加了文件的断点续传功能,得到了不少朋友的好评.本着按照Uploadify原样复制的原则,本次在一些朋友的建议中采纳了几点,做了一次较小的改动,定为2.1版本 ...
- Java提高篇(三四)-----fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...
- HOOK技术的一些简单总结
好久没写博客了, 一个月一篇还是要尽量保证,今天谈下Hook技术. 在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常 ...
- Yii Model中添加默认搜索条件
在查询中增加条件 public function defaultScope() { return array( 'condition' => " is_deleted = 0" ...
- Java 9终于要包含Jigsaw项目了
当Jigsaw在Java 9中最终发布时,这个项目的历史已经超过八年了. 转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/180.html? ...
- struts2学习笔记之十一:struts2的类型转换器
Struts2的类型转换器 如何实现Struts2的类型转换器? * 继承StrutsTypeConverter * 覆盖convertFromString和convertToString 注 ...
- Atitti css transition Animation differ区别
Atitti css transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限. 1 1.2. Transition ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...