使用 SDWebImage 而不是 AFNetworking 进行图像加载有很大的优势吗?

Posted

技术标签:

【中文标题】使用 SDWebImage 而不是 AFNetworking 进行图像加载有很大的优势吗?【英文标题】:Is there a big advantage to using SDWebImage over AFNetworking for image loading? 【发布时间】:2014-01-05 00:22:04 【问题描述】:

SDWebImage claims AFNetworking 不会缓存图像本身,而只会缓存 HTTP 响应,因此 SDWebImage 从缓存中调用图像并呈现它的速度更快。

如果我想使用纯粹的 AFNetworking,那么这样的说法,不管是真是假,在性能方面真的很明显吗?这是我应该警惕的事情吗?

【问题讨论】:

黑客新闻news.ycombinator.com/item?id=4237214有一个关于SDWebImage VS AFNetworking的问答 【参考方案1】:

SDWebImage 对图像缓存有更多的控制。它可以缓存到磁盘或内存。

AFNetworking 依赖 NSURLCache 在应用程序启动之间保存图像(而且它不是很可靠),但如果您只需要在一次运行期间进行缓存,那就太好了。

这两种解决方案都会在应用程序的生命周期内将 UIImage 对象缓存在内存中。这很重要,因为缓存 NSData 表示的速度不足以在滚动表格视图时顺利加载图像。

总结:AFNetworking 的解决方案更简单,适用于大多数用例。如果您需要更好的控制或磁盘缓存,请使用 SDWebImage 而不是修改 AFNetworking 的实现。

【讨论】:

SDWebImage 非常方便,尤其是渐进式图像下载。但它基于 NSURLConnection(即使在最新版本 3.7.5 中),我们知道从 ios 9 开始不推荐使用它。NSURLSession 已经存在 3 年多了。令人惊讶的是 SDWebImage 仍然没有迁移到 NSURLSession。请参阅 SDWebImage:Migration to NSURLSessions。 AFNetworking 3.0 完全基于 NSURLSession。所以我认为 AfNetworking 会比 SDWebImage 更好。【参考方案2】:

我都用过:

SDWebImage 比 UIImage + AFNetworking 快得多。

在 UITableViewCell 中你可以看到性能上的显着差异。 AFNetworking 花了很多时间,而且代码也太长了。 SDWebImage 更快更短。

使用 SDWebImage 以获得更好的图像性能。

【讨论】:

我已经在使用 AFNetworking 与服务器进行安静的通信。将 SDWebImage 用于图像是否有效或 AFNetworking 就足够了? 是的,SDWebImage 性能比我看到的 AFNetworking 更好。如果您的应用程序播放大量图像,最好使用 SDWebImage。【参考方案3】:

这不是真的。

如果查看code,您可以看到UIImageView+AFNetworking 类别缓存UIImage(使用NSCacheurlRequest 作为键)。但是缓存并没有写入磁盘。

【讨论】:

以上是关于使用 SDWebImage 而不是 AFNetworking 进行图像加载有很大的优势吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取缓存图像 SDWebImage 的数据

请教大家:使用sdwebimage下载图片完成后更新cell中的imageview如何动态更改行高

SDWebImage总结

SDWebImage无法使用Firebase存储图像下载

SDWebImage

使用SDWebImage下载图片,sharedDownloader方法下载成功,new 方法下载失败