毕加索v / s Imageloader v / s壁画vs滑翔

发现:

  1. 毕加索v / s ImageLoader之间的区别
  2. 关于图书馆GLIDE的信息在这里…
  3. 现在Facebook最近发布了一个名为Fresco的新图像库

问题:

  1. Picasso v / s Imageloader v / s Fresco和有什么不一样?
  2. 我们什么时候可以使用Glide
  3. 哪一个是最好的图书馆使用。
  4. 如果每个图书馆都有其自身的意义,它们是什么?

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

但是你不必为此而接受我的话。 我们已经发布了一个示例应用程序,可以让您比较五个图书馆 – 壁画,毕加索,UIL,Glide和Volley图像加载器 – 的性能。 你可以在我们的GitHub仓库中得到它。

我还应该指出, com.facebook.fresco:fresco Central上的壁画是com.facebook.fresco:fresco

壁画提供的function,毕加索,UIL,和滑翔还没有:

  1. 图像不存储在Java堆中,而是存储在ashmem堆中。 中间字节缓冲区也存储在本地堆中。 这留下了更多的内存供应用程序使用。 它降低了OutOfMemoryErrors的风险。 这也减less了垃圾收集应用程序的数量,导致更好的性能。
  2. 渐进式JPEG图像可以stream式传输,就像在Web浏览器中一样。
  3. 图像可以在任何点进行裁剪,而不仅仅是中心。
  4. JPEG图像可以在本地resize。 这可以避免在尝试缩小图像的时候出现OOM问题。

还有很多其他的( 见我们的文档 ),但是这些是最重要的。

请注意,这是一个非常基于观点的问题,所以我停止了做峡湾并且快速地做了一个桌子

在这里输入图像描述

现在库比较是很难的,因为在许多参数上,所有的四个几乎都做同样的事情,除了可能为Fresco,因为有一大堆新的内存级优化。所以让我知道,如果某些参数你想根据我的经验看比较。

使用Fresco最less,答案可能会演变,因为我继续使用和理解它的当前利用。 在used personally使用完成的应用程序中至less使用过一次库。

*注 – Fresco现在支持GIF以及WebPanimation

这些答案完全是我的看法

答案

  1. 毕加索是一个易于使用的图像加载器,同样适用于Imageloader。 壁画使用不同的方法来加载图像,我还没有使用它,但它看起来更像是一个解决scheme,从networking获取图像,caching它们,然后显示图像。 那么像毕加索/ Imageloader / Glide的其他方式对我来说是更多在屏幕上显示图像,也从networking获取图像,并caching它们。

  2. Glide试图与毕加索有些互换。我认为,当他们被创build时,毕加索的思维集合遵循HTTP规范,并让服务器决定caching策略和caching的大小,并按需resize。 Glide跟随HTTP规范是一样的,但是通过做一些不同的假设,比如cachingresize的图像而不是全尺寸的图像,并用RGB_565而不是RGB_8888来显示图像,从而尝试减小内存占用量。 这两个库都提供了默认设置的完全自定义。

  3. 至于哪个图书馆最好用,真的很难说。 毕加索,Glide和Imageloader都是很受尊重,经过充分testing的库,所有这些库都使用默认设置很容易使用。 毕加索和Glide都只需要1行代码来加载图像,并有一个占位符和错误图像。 自定义行为也不需要太多的工作。 Imageloader同样也是一个较旧的库,然后毕加索和Glide,但是我没有使用它,所以不能说性能/内存使用情况/定制,但看看github上的readme给我的印象也是相对容易使用和设置。 因此,在select这三个图书馆中的任何一个时,都不能做出错误的决定,更不用说个人的品味。 对于壁画我的意见是,它的另一个Facebook库,所以我们必须看看如何解决他们,到目前为止有logging是不是很好。 就像facebook的SDK仍然没有在mavenCentral上正式发布我自2014 年9月份以来还没有使用过Facebook sdk,而且似乎他们已经在2014年10月在mavenCentral上线了第一个版本。所以需要一段时间才能获得好的意见。

  4. 我认为三大名牌之间没有明显的区别。 唯一突出的是壁画,但那是因为它有一个不同的方法,是新的,而不是战斗testing。

壁画 来源 | 场外
( – )
– 图书馆的规模很大
– 无视图callback,位图参数
– SimpleDraweeView不支持wrap_content
– 巨大的caching大小
(+)
– 非常快的图像加载器(用于小&&中等图像)
– 很多function(stream媒体,绘图工具,内存pipe理等)
– 可以直接在xml中设置(例如圆angular)
– GIF支持
– WebP支持

毕加索的 来源 | 场外
( – )
– 从互联网缓慢加载大图像到ListView
(+)
– 图书馆的一丁点大小
– 小尺寸的caching
– 使用简单
– 用户界面不冻结
– WebP支持

滑翔 来源

( – )
– 图书馆的大小
(+)
– caching的Tinny大小
– 使用简单
– GIF支持
– WebP支持
– 从互联网快速加载大图像到ListView
– 用户界面不冻结
– BitmapPool重新使用内存,从而减lessGC事件

通用图像加载器的 来源

( – )
– function受限(image processing有限)
– 自2015年11月27日以来,项目支持已经停止
(+)
– 图书馆的一丁点大小
– 使用简单


由我testingSGS2(Android 4.1)(WiFi 8.43 Mbps)
Java的官方版本,不适用于Xamarin!
2015年10月19日

我更喜欢使用Glide。
在这里阅读更多。
如何使用Glide 将caching写入外部存储(SD卡) 。

Glide和毕加索都不是完美的。 Glide将图像加载到内存的方式,并且caching比Picasso更好,它使加载图像的速度更快。 另外,它还有助于防止stream行的应用程序OutOfMemoryError。 GIFanimation加载是Glide提供的一种杀死function。 无论如何,毕加索解码图像质量比滑翔更好。

我更喜欢哪一个? 虽然我使用毕加索这么长时间,但我必须承认,我现在更喜欢滑翔。 但是我build议你改变位图格式为ARGB_8888,并让Glidecaching全尺寸的图像,并首先resize。 其余的会做你的工作太棒了!

  • 毕加索和Glide的方法数分别为840和2678。
  • 毕加索(v2.5.1)的大小约为118KB,而Glide(v3.5.2)的大小约为430KB。
  • Glide为每个尺寸创buildcaching的图像,而Picasso保存完整的图像并进行处理,因此在使用Glide时加载时显示速度更快,但使用的内存更多。
  • glide使用RGB_565默认使用较less的内存。

+1毕加索调色板助手 。

有一个post,谈论毕加索与滑翔后很多

我想和大家分享我在毕加索,通用图片加载程序和Glide中所做的基准 : https : //bit.ly/1kQs3QN

壁画是不符合基准的,因为对于我正在运行testing的项目,我们不想重构我们的布局(因为Drawee视图)。

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

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

Interesting Posts