缓存

SDWebImage内部实现过程

試著忘記壹切 提交于 2020-03-07 19:34:25
入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。 进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:. 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。 SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。 如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:。

SDWebImage内部实现过程

我是研究僧i 提交于 2020-03-07 19:32:45
1. 入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。 2. 进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:. 3. 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。 4. SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。 5. 如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。 6. 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调

仿SDWebImage

房东的猫 提交于 2020-03-07 19:23:53
仿SDWebImage 目标:模拟 SDWebImage 的实现 说明:整体代码与之前博客上的演练代码的基本一致,只是编写顺序会有变化! 在模仿 SDWebImage 之前,首先需要补充一个知识点:NSOperation自定义操作 下载操作实现 #import "NSString+Path.h" @interface DownloadImageOperation() /// 要下载图像的 URL 字符串 @property (nonatomic, copy) NSString *URLString; /// 完成回调 Block @property (nonatomic, copy) void (^finishedBlock)(UIImage *image); @end @implementation DownloadImageOperation + (instancetype)downloadImageOperationWithURLString:(NSString *)URLString finished:(void (^)(UIImage *))finished { DownloadImageOperation *op = [[DownloadImageOperation alloc] init]; op.URLString = URLString; op

页面加载及优化

偶尔善良 提交于 2020-03-07 19:18:52
页面加载过程 一、 DNS解析(域名解析) DNS 查询的基本过程如下: 1. 查找浏览器缓存 浏览器会缓存 DNS 查询结果,不同的浏览器缓存时间会有所不同。如果浏览器存在缓存,那么 DNS 查询就到此为止。 2. 查找系统缓存 浏览器缓存中没有需要的数据时,就会往上找到操作系统缓存。我们也可以手动配置 host 文件,这样浏览器会优先使用我们的配置。 3. 查找路由器缓存 系统缓存中也没有需要的数据时,就会找到路由器。 4. 查找运营商 DNS 缓存 之后会向运营的服务器(网络配置中的 DNS 服务器地址)请求 DNS 数据。 5. 递归搜索 如果运营商服务器内也没有需要的数据时,就会开始消耗最大的递归搜索。 二、建立连接( TCP连接) http 协议是经过 TCP 来传输的,所以产生一个 http 请求就会有 TCP connect ,但是依赖于长连接,不会产生这个过程。 三、发送请求 从发送请求到开始响应的过程 。 request header :请求头信息, request body :请求体信息 四、接收数据 从响应开始到数据传输完成的过程。 response header :响应头信息。 response body :响应体信息。 五、解析 DOM 树 解析 HTML 结构 ,加载外部脚本和样式表文件,解析并执行脚本代码 ,构建与解析 HTML DOM 树

SDWebImage

纵饮孤独 提交于 2020-03-07 18:56:32
SDWebImage内部实现过程 入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。 进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:. 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。 SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。 如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调

生产要不要开启MySQL查询缓存

一笑奈何 提交于 2020-03-07 18:51:54
一、前言 在当今的各种系统中,缓存是对系统性能优化的重要手段。MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议生产环境中把MySQL Query Cache关闭。按道理,MySQL Server默认打开,是鼓励用户使用缓存,但是大拿们却建议关闭此功能,并且国内各个云厂商提供的MySQL云服务中默认都是关闭这个功能,这是为什么?他们在使用中遇到了什么坑?本文将会从以下几方面来详解MySQL Query Cache。 1.MySQL查询缓存是什么? MySQL缓存规则是什么? 如何配置和缓存MySQL缓存 MySQL缓存的优缺点 生产要不要开启MySQL缓存 二、 MySQL查询缓存简介 MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客户端。为了提高完全相同的Query语句的响应速度,MySQL Server会对查询语句进行Hash计算后,把得到的hash值与Query查询的结果集对应存放在Query Cache中。当MySQL Server打开Query Cache之后,MySQL Server会对接收到的每一个SELECT 语句通过特定的Hash算法计算该Query的Hash值,然后通过该hashi值到Query Cache中去匹配

iOS SDWebImage

给你一囗甜甜゛ 提交于 2020-03-07 18:34:41
iOS之SDWebImage的实现原理 通过NSOperationQueue和NSOperation进行图片下载; 利用一些GCD函数对GIF图片进行解析; 利用URL作为key,NSOperation作为value; 利用URL作为key,UIImage作为value; SDWebImage的用法 可以利用coaoapod 导入工程 在需要的地方导入头文件 #import "UIImageView+WebCache.h" 调用sd_setImageWithURL:方法缓存图片 1.sd_setImageWithURL: //图片缓存的基本代码,就是这么简单 [self.image1 sd_setImageWithURL:imagePath1]; 2. sd_setImageWithURL: completed: //用block 可以在图片加载完成之后做些事情 [self.image2 sd_setImageWithURL:imagePath2 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { NSLog(@"这里可以在图片加载完成之后做些事情"); }]; 3. sd_setImageWithURL: placeholderImage: /

2016-03-16 sdwebimage

南楼画角 提交于 2020-03-07 18:34:10
SDWebImage框架底层讲解 一. 异步加载图片 1.搭建界面&数据准备 数据准备 @interface AppInfo : NSObject /// App 名称 @property (nonatomic, copy) NSString *name; /// 图标 URL @property (nonatomic, copy) NSString *icon; /// 下载数量 @property (nonatomic, copy) NSString *download; + (instancetype)appInfoWithDict:(NSDictionary *)dict; /// 从 Plist 加载 AppInfo + (NSArray *)appList; @end + (instancetype)appInfoWithDict:(NSDictionary *)dict { id obj = [[self alloc] init]; [obj setValuesForKeysWithDictionary:dict]; return obj; } /// 从 Plist 加载 AppInfo + (NSArray *)appList { NSURL *url = [[NSBundle mainBundle] URLForResource:@"apps.plist"

第三方框架SDWebImage学习

倾然丶 夕夏残阳落幕 提交于 2020-03-07 18:32:47
1. 图片文件缓存的时间有多长:1周 _maxCacheAge = kDefaultCacheMaxCacheAge 2. SDWebImage 的内存缓存是用什么实现的? NSCache! 3. SDWebImage 的最大并发数是多少? maxConcurrentDownloads = 6 是程序固定死了,可以通过属性进行调整! 4. SDWebImage 支持动图吗?GIF 支持 #import <ImageIO/ImageIO.h> [UIImage animatedImageWithImages:images duration:duration]; 5. SDWebImage是如何区分不同格式的图像的 根据图像数据第一个字节来判断的! PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式! JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好! GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的! 6. SDWebImage 缓存图片的名称是怎么确定的 如果单纯使用 文件名保存,重名的几率很高! 使用 MD5 的散列函数!对完整的 URL 进行 md5,结果是一个 32 个字符长度的字符串! 7. SDWebImage 的内存警告是如何处理的! 利用通知中心观察

SDWebImage的总结

那年仲夏 提交于 2020-03-07 18:31:46
SDWebImage 1> 图片文件缓存的时间有多长:1周 _maxCacheAge = kDefaultCacheMaxCacheAge 2> SDWebImage 的内存缓存是用什么实现的? NSCache 3> SDWebImage 的最大并发数是多少? maxConcurrentDownloads = 6 是程序固定死了,可以通过属性进行调整! 4> SDWebImage 支持动图吗?GIF #import <ImageIO/ImageIO.h> [UIImage animatedImageWithImages:images duration:duration]; 5> SDWebImage是如何区分不同格式的图像的 根据图像数据第一个字节来判断的! PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式! JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好! GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的! 6> SDWebImage 缓存图片的名称是怎么确定的! md5 如果单纯使用 文件名保存,重名的几率很高! 使用 MD5 的散列函数!对完整的 URL 进行 md5,结果是一个 32 个字符长度的字符串! 7> SDWebImage 的内存警告是如何处理的!