YYWebImage
YYWebImage copied to clipboard
重复请求图片问题
@ibireme 在使用YYWebImage框架的时候,发现非常耗流量,然后抓包,发现很多图片重复下载两次,甚至三次.
- 在YYWebImageOperation中的connectionDidFinishLoading:方法设置断点,的确如此.
- 在YYWebImageManager中的requestImageWithURL:方法上方添加代码: NSOperationQueue *queue = _queue; if (queue) { for (YYWebImageOperation *tempOperation in queue.operations) { if ([tempOperation.request.URL.absoluteString isEqualToString:url.absoluteString]) { return tempOperation; } } } 发现规避了重复下载的问题
- 推测在一张图片还未下载完成时重复下载,在queue中存在两个相同URL的Operation
- 那么问题来了:是在设计之初未考虑到这个问题,还是我使用的方法有问题?如果是我使用的方法有问题,那么关键点在何处?
在category里有判断是否已经缓存过的,你是直接用了manager吗
@HoneyLuka 在YYWebImageManager里面的下载队列里可能同时存在多个相同URL的Operation
你是通过什么方式(或者说通过调用哪个方法)开始加载图片的? 我觉得通常使用的话直接用UIImageView的category就好了,而且category里也确实存在判断是否已经缓存过的代码,所以应该不会出问题
sorry,理解错了你的意思,我以为你在说'缓存失效'的问题,其实关键点在于'会出现多个重复请求' 所以我建立了一个测试项目,测试了一下两个不同ImageView同时请求一张图片的情况,确实复现了你所说的'重复请求'的问题。
还有,你贴出的代码虽然解决了重复请求的问题,但是这样是不可行的,因为丢失了此次请求的所有回调(progress, transform, completion),并且返回的operation是别人的operation,在后边的执行过程中可能会出现其他未知问题(其实是因为我懒,不想继续往后看代码了...)。
最后,对于本题的重点'重复请求'的问题,还是要等作者来亲自解答了^_^
@HoneyLuka 嗯,是的,我贴出的代码只是为了说明存在的问题. 依然非常感谢您
加上了上面的代码后进行测试,在一个页面中请求几个相同的图片链接,只有最先请求的imageView上显示了图片,其他的没有显示,请帮忙分析一下该怎么处理这样的问题^_^
我也遇到这个问题
作者在养病, fork 一份慢慢理解慢慢改吧