Picasso v/s Imageloader v/s Fresco vs Glide vs Coil 对比

发现:

  1. Picasso v/s ImageLoader 的差异能在这里看到 …
  2. 关于库GLIDE here…的信息
  3. Facebook有自己的图书馆 李< em > < >强壁画
  4. 列表中的最新成员 Coil< /strong>

问题:

  1. Picasso v/s Imageloader vs /s Fresco vs Coil 之间有什么区别
  2. 哪个是最好的库。
  3. 如果每个库都有自己的意义,那么它们是什么?
166849 次浏览

这些答案完全是我个人的观点

答案

  1. 毕加索是一个易于使用的图像加载器,同样适用于Imageloader。Fresco使用了不同的方法来加载图像,我还没有使用过它,但它看起来太像我更像是一个解决方案,从网络获取图像,然后缓存它们,然后显示图像。然后反过来像Picasso/Imageloader/Glide,对我来说更多的是在屏幕上显示图像,也从网络获取图像并缓存它们。

  2. 格莱德试图在某种程度上与毕加索互换。我认为当它们被创建时,Picasso的思维模式是遵循HTTP规范,让服务器决定缓存策略,缓存完整大小,并根据需要调整大小。Glide与遵循HTTP规范是一样的,但是通过做一些不同的假设来尝试拥有更小的内存占用,比如缓存调整大小的图像而不是完整大小的图像,以及使用RGB_565而不是RGB_8888显示图像。这两个库都提供了完全自定义的默认设置。

  3. 至于使用哪个库是最好的,真的很难说。Picasso, Glide和Imageloader是很受尊敬的和经过良好测试的库,它们都很容易使用默认设置。Picasso和Glide都只需要一行代码来加载图像,并具有占位符和错误图像。定制行为也不需要那么多工作。Imageloader也是一样,它也是一个比Picasso和Glide更老的库,但我没有使用过它,所以不能说太多关于性能/内存使用/自定义,但在github上查看自述文件给我的印象是,它也相对容易使用和设置。因此,在选择这3个库中的任何一个时,你都不会做出错误的决定,这更多的是个人喜好的问题。至于壁画,我的观点是,这是另一个facebook图书馆,所以我们必须看看它将如何为他们工作,到目前为止,它的记录不太好。我从2014年9月开始就不习惯facebook SDK,似乎他们在2014年10月就把第一个版本放在了mavenCentral上。所以我们还需要一段时间才能得到好的意见。

  4. 我认为这3个大的库之间没有显著的区别。唯一突出的是壁画,但这是因为它有不同的方法,是新的,没有经过战斗考验。

我是Fresco项目的工程师之一。显然我是有偏见的。

但你不必相信我的话。我们已经发布了一个示例应用程序,允许您并排比较五个库的性能——Fresco, Picasso, UIL, Glide和Volley Image Loader。你可以在我们的GitHub回购得到它。

我还应该指出,Fresco在Maven Central上可用,作为com.facebook.fresco:fresco

Fresco提供了毕加索、UIL和Glide还没有的功能:

  1. 图像不是存储在Java堆中,而是存储在ashmem堆中。中间字节缓冲区也存储在本机堆中。这为应用程序留下了更多的可用内存。它降低了内存溢出错误的风险。它还减少了垃圾收集应用程序的数量,从而获得更好的性能。
  2. 渐进式JPEG图像可以流式传输,就像在web浏览器中一样。
  3. 图像可以围绕任何一点裁剪,而不仅仅是中心。
  4. JPEG图像可以自行调整大小。这避免了在尝试缩小图像时出现OOMing的问题。

还有许多其他的(请参阅我们的文档),但这些是最重要的。

请注意,这是一个高度基于观点的问题,所以我不再制作峡湾,而是快速制作了一张表格

enter image description here

库比较很困难,因为在很多参数上,所有四个都做同样的事情,可能除了Fresco因为它有一大堆新的内存级别优化。所以,如果你想根据我的经验来比较某些参数,请告诉我。

由于使用Fresco最少,所以随着我继续在当前的漏洞中使用和理解它,答案可能会发生变化。used personally在一个完整的应用程序中至少使用过一次库。

*注-壁画现在支持GIF以及WebP动画

格莱德和毕加索都不是完美的。Glide加载图像到内存并进行缓存的方式比Picasso更好,Picasso让图像加载得更快。此外,它还有助于防止应用程序流行的OutOfMemoryError。GIF动画加载是Glide提供的一个致命功能。总之,毕加索解码的图像质量比格莱德更好。

我更喜欢哪一个?虽然我用毕加索画了这么长时间,但我必须承认我现在更喜欢格莱德。但我建议你将位图格式更改为ARGB_8888,让Glide先缓存全尺寸图像和调整大小的图像。剩下的会很好地完成你的工作!

  • 毕加索和格莱德的方法数分别为840种和2678种。
  • 毕加索(v2.5.1)的大小约为118KB,而Glide (v3.5.2)的大小约为430KB。
  • Glide按大小创建缓存图像,而Picasso保存完整图像并进行处理,因此在加载时,Glide显示更快,但占用更多内存。
  • Glide默认使用较少的内存RGB_565

+1毕加索调色板助手

有一个帖子谈论了很多关于毕加索vs Glide 帖子

壁画 sources | off site

(-)

  • 图书馆规模庞大
  • 没有回调视图,位图参数
  • SimpleDraweeView不支持wrap_content
  • 巨大的缓存容量

(+)

  • 相当快的图像加载器(小&&中图片)
  • 大量的功能(流,绘图工具,内存管理等)
  • 可以直接在xml中设置(例如圆角)
  • GIF格式支持
  • WebP和动画WebP支持

毕加索 sources | off site .

(-)

  • 缓慢加载大图像从互联网到ListView

(+)

  • 图书馆太小了
  • 缓存容量小
  • 使用简单
  • UI不会冻结
  • WebP支持

滑翔 sources

(-)

  • 图书馆规模大

(+)

  • 缓存的大小很小
  • 使用简单
  • GIF格式支持
  • WebP支持
  • 快速加载大图像从互联网到ListView
  • UI不会冻结
  • BitmapPool重用内存,从而减少GC事件

通用图像加载器 sources

(-)

  • 功能有限(图像处理有限)
  • 项目自2015年11月27日起停止支持

(+)

  • 图书馆太小了
  • 使用简单

我在SGS2 (Android 4.1)上测试(WiFi 8.43 Mbps) Java的官方版本,不是Xamarin的! 10月19日 我更喜欢用Glide。 阅读更多在这里 如何将缓存写入外部存储(SD卡) with Glide.

我想和你分享一个我在毕加索,通用图像加载器和滑翔中做的基准

Fresco不在基准测试中,因为对于我正在运行测试的项目,我们不想重构我们的布局(因为Drawee视图)。

我推荐通用图像加载器,因为它的自定义,内存消耗和大小和方法之间的平衡。

如果你有一个小项目,我会选择格莱德基金会(或给Fresco一个尝试)。