手机客户端为什么会留存下来?而不是被一味的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. 【腾讯Bugly干货分享】移动互联网测试到质量的转变

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ee0934b690d84c3188d7c7 Dev Club 是一个交流移动 ...

  2. Hdoop日记Day10---RPC机制

    一.RPC(Remote Procedure Call)简介 RPC 是远程过程调用(Remote Procedure Call),即远程调用其他虚拟机中运行的javaobject.RPC 是一种客户 ...

  3. 2015继续任性——不会Git命令,照样玩转Git

    最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...

  4. ASP.NET一般处理程序访问Session问题

    我们在使用一般处理程序的时候,访问Session会出现如下错误: 解决方案如下: //引用命名空间 using System.Web.SessionState; //继承IRequiresSessio ...

  5. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes 本篇分享一下第5个已完工的视频,即<beginner Graphics – ...

  6. UIImage NSData 相互转化

    //UIImage 转为 NSData NSData *imageData = UIImagePNGRepresentation(aImage); //NSData 转为 UIImage UIImag ...

  7. 基础才是重中之重~C#中标准的IDispose模式

    回到目录 IDispose模式在C++中用的很多,用来清理资源,而在C#里,资源分为托管和非托管两种,托管资源是由C#的CLR帮助我们清理的,它是通过调用对象的析构函数完成的对象释放工作,而对于非托管 ...

  8. js笔记——js里var与变量提升

    var是否可以省略 一般情况下,是可以省略var的,但有两点值得注意: 1.var a=1 与 a=1 ,这两条语句一般情况下作用是一样的.但是前者不能用delete删除.不过,绝大多数情况下,这种差 ...

  9. salesforce 零基础开发入门学习(十二)with sharing 、without sharing 、无声明区别

    在salesforce中,声明类大概可以分成三类:分别是可以声明为with sharing,without sharing,以及两者均不声明. public with sharing class A ...

  10. phpstudy80端口被占用时的解决方案

    1.适合人群? 之前笔记本单独安装过Apache.php.mysql环境,但是后期想用集成开发环境phpstudy的,安装完phpstudy后(之前的单独环境依然存在),发现启动时,总是显示80端口被 ...