【问题标题】:Picasso v/s Imageloader v/s Fresco vs Glide vs Coil [closed]Picasso v/s Imageloader v/s Fresco vs Glide vs Coil [关闭]
【发布时间】:2015-06-04 11:29:05
【问题描述】:

调查结果:

  1. Picasso v/s ImageLoader here ... 之间的差异
  2. 关于图书馆的信息GLIDE here ...
  3. Facebook 有自己的库 Fresco
  4. 列表中的最新成员Coil

问题:

  1. Picasso v/s Imageloader v/s Fresco v/s Coil 有什么区别
  2. 最好使用哪个库。
  3. 如果每个图书馆都有自己的意义,它们是什么?

【问题讨论】:

  • 我对壁画也很感兴趣。谁能解释一下区别?
  • 这里不是提出基于意见的问题的地方
  • @danny117 如果我们对此一无所知,我们可以在这里做什么?
  • @ShobhitPuri 这个tool 将帮助您检查方法计数

标签: android universal-image-loader picasso fresco android-glide


【解决方案1】:

我是 Fresco 项目的工程师之一。所以很明显我有偏见。

但你不必相信我的话。我们发布了一个示例应用程序,可让您并排比较五个库(Fresco、Picasso、UIL、Glide 和 Volley Image Loader)的性能。您可以通过our GitHub repo 获得它。

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

Fresco 提供了 Picasso、UIL 和 Glide 尚不具备的功能:

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

还有很多其他的 (see our documentation),但这些是最重要的。

【讨论】:

  • 谢谢,您能否以表格格式将“我们发布了一个示例应用程序,允许您比较五个库的性能”的结果附在您的答案中?
  • Fresco 比其他功能更多,但也更大..
  • 他们在链接后面添加了一个“s”。 github.com/facebook/fresco/tree/master/samples
  • @tyronen 我对 Fresco 很感兴趣。它是否允许从网络加载本地图像?谢谢
  • @wedi 是的。
【解决方案2】:

请注意,这是一个高度基于意见的问题,所以我停止制作峡湾并制作了一张快速表

现在库比较很困难,因为在许多参数上,所有四个几乎都做同样的事情,除了 Fresco 可能,因为其中有一大堆新的内存级别优化。所以如果你有某些参数,请告诉我'希望根据我的经验进行比较。

最少使用 Fresco,答案可能会随着我继续使用和理解它来解决当前的漏洞而发展。 used personally 在已完成的应用程序中至少使用过一次该库。

*注意 - Fresco 现在支持 GIF 和 WebP 动画

【讨论】:

  • 我对 Fresco 较低的“可定制性”、“网络图像使用”和“易用性”评级感到好奇。这些评级的依据是什么?
  • 大部分是第一次使用,会用 Fresco 多一点理解,这个答案可能会演变:)
  • @Slartibartfast 您有机会试用 Fresco 和最新的 Glide 3.0 版本吗?你还会给他们同样的评价吗?
  • 您错过了一个重要方面。 ...图书馆大小。这就是 Picasso 和 UImageLoader 不支持 GIF 的主要原因。许可证也可以包含在内。
  • @AhamadullahSaikat 他个人使用的那些。
【解决方案3】:

壁画 sources | off site

(-)

  • 图书馆规模庞大
  • 视图、位图参数无回调
  • SimpleDraweeView 不支持 wrap_content
  • 超大缓存

(+)

  • 相当快的图像加载器(适用于中小型图像)
  • 很多功能(流媒体、绘图工具、内存管理等)
  • 可以直接在 xml 中设置(例如圆角)
  • GIF 支持
  • WebP 和动画 Webp 支持

毕加索 sources | off site

(-)

  • 从 Internet 将大图像加载到 ListView 中的速度很慢

(+)

  • 库很小
  • 小尺寸缓存
  • 使用简单
  • UI 没有冻结
  • WebP 支持

滑行 sources

(-)

  • 图书馆规模大

(+)

  • 缓存很小
  • 使用简单
  • GIF 支持
  • WebP 支持
  • 将大图从 Internet 快速加载到 ListView 中
  • UI 没有冻结
  • BitmapPool 重用内存,从而减少 GC 事件

通用图像加载器 sources

(-)

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

(+)

  • 库很小
  • 使用简单

由我在 SGS2 (Android 4.1) (WiFi 8.43 Mbps) 上测试 Java 的官方版本,不是 Xamarin 的! 2015 年 10 月 19 日 我更喜欢使用 Glide。 阅读更多here How to write cache to External Storage (SD Card) 与 Glide。

【讨论】:

  • “相当快的图像加载器”似乎与 Fresco 的“应用冻结”相矛盾。
  • 我在 Xamarin 项目中有 Picasso,内存使用量很大(用于将图像加载到回收站视图中)。 OutOfMemory 一直...
  • @VSG24 有 2 个选项:1)你用错了。 2) Xamarain 的 Android (java) 版本的 lib 不一样
  • 作为 Glide 负片(-) 我经历了很多闪烁。加载的图像会突然“重新设置”
  • @RJFares 我最近尝试了最新版本,你可以使用ImagePipelineConfig.setDownsampleEnabled(true)来防止它冻结。但它有时会跳过 GIF 的帧。如果你只在你的应用上显示静态图片,我想你可以试试看。
【解决方案4】:

这些答案完全是我的意见

答案

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

  2. Glide 试图在某种程度上与 Picasso 互换。我认为当他们被创建时,Picasso 的思维定势是遵循 HTTP 规范,让服务器决定缓存策略,缓存全尺寸并按需调整大小。 Glide 与遵循 HTTP 规范相同,但尝试通过一些不同的假设来减少内存占用,例如缓存调整大小的图像而不是完整大小的图像,并使用 RGB_565 而不是 RGB_8888 显示图像。这两个库都提供了对默认设置的完全自定义。

  3. 至于哪个库最好用真的很难说。 Picasso、Glide 和 Imageloader 是备受推崇且经过良好测试的库,它们都易于使用默认设置。 Picasso 和 Glide 都只需要 1 行代码来加载图像并具有占位符和错误图像。自定义行为也不需要那么多工作。 Imageloader 也是如此,它也是一个比 Picasso 和 Glide 更旧的库,但是我没有使用过它,所以不能说太多关于性能/内存使用/自定义但查看 github 上的自述文件给我的印象是它也是相对容易使用和设置。因此,在选择这三个库中的任何一个时,您都不能做出错误的决定,这更多的是个人喜好问题。对于 fresco,我认为它是另一个 facebook 库,所以我们必须看看这对他们有什么影响,到目前为止,跟踪记录并不是那么好。 好像 facebook SDK 还没有在 mavenCentral 上正式发布我从 2014 年 9 月开始就没有使用 facebook sdk,而且他们似乎已经在 2014 年 10 月在 mavenCentral 上发布了第一个版本。所以它需要一段时间后我们才能得到任何好的意见。

  4. 我认为这3个大牌库之间没有显着差异。唯一脱颖而出的是壁画,但那是因为它采用了不同的方法,并且是新的,没有经过实战考验。

【讨论】:

  • 次要问题:Facebook SDK 似乎已经作为 Maven Central 上的 AAR 正式提供了一段时间。 developers.facebook.com/docs/android/…
  • 感谢纠正,自从我使用 facebook SDK 以来已经有一段时间了,所以我没有检查过。仍然花了太长时间才把它们放在那里。
  • 读完这篇文章一年后,我仍然想知道我是否应该使用 Frescoe,但我仍然不明白为什么我应该这样做。虽然 Glide 和 Picasso 开箱即用,但 Frescoe 只需要你做很多看起来不值得的事情,而且大小......
  • 我想指出 fresco 存在内存问题:github.com/facebook/react-native/issues/8711
  • 我也遇到过 fresco 的内存问题,不幸的是,如果您需要动画 gif 支持,它似乎必须是 fresco 或 glide。还有 FWIW here's a link 到一些额外的比较细节。
【解决方案5】:

Glide 和 Picasso 都不是完美的。 Glide 将图像加载到内存并进行缓存的方式比 Picasso 更好,后者让图像加载速度更快。此外,它还有助于防止应用程序出现流行的 OutOfMemoryError。 GIF 动画加载是 Glide 提供的杀戮功能。无论如何,毕加索解码的图像质量比 Glide 更好。

我更喜欢哪一个?虽然我用 Picasso 这么久了,但我必须承认我现在更喜欢 Glide。但我建议你将 Bitmap Format 更改为 ARGB_8888 并让 Glide 缓存全尺寸图像和调整大小的图像。其余的会很好地完成您的工作!

  • Picasso 和 Glide 的方法计数分别为 840 和 2678。
  • Picasso (v2.5.1) 的大小约为 118KB,而 Glide (v3.5.2) 的大小约为 430KB。
  • Glide 会根据大小创建缓存图像,而 Picasso 会保存完整的图像并对其进行处理,因此在加载时使用 Glide 显示速度更快,但会占用更多内存。
  • 默认情况下使用RGB_565 Glide 使用更少的内存。

为毕加索+1 Palette Helper

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

【讨论】:

  • 优秀的文章。我现在正在切换到 Glide。甚至比毕加索更好不是我的想法。 :)
  • 我看到的一个问题是 Glide 需要 API 10。这有点问题,因为我无法从我的应用程序中删除 API 9 支持。否则肯定是更好的选择。
  • 你能解释一下你为什么使用 api 9 吗?只是好奇...
  • 除非我遗漏了什么,否则它支持所有 Gingerbread 版本。
  • 我认为这有点主观。但最好支持尽可能多的设备/版本。不? :)
【解决方案6】:

我想和你分享一个基准我在Picasso、Universal Image Loader和Glide中所做的:https://bit.ly/1kQs3QN

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

我推荐的是Universal Image Loader,因为它的自定义、内存消耗以及大小和方法之间的平衡。

如果你有一个小项目,我会选择 Glide(或者试试 Fresco)。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多