毕加索v / s图像加载器v / s壁画vs滑行[关闭]


343

发现:

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

问题:

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

我也对壁画感兴趣。任何人都可以解释差异吗?
克里特(Krit)


8
这不是问基于意见的问题的地方
danny117

16
@ danny117,如果对此一无所知,该怎么办?
Anand Savjani 2015年

2
@ShobhitPuri这个工具将帮助您检查方法计数
Nicholas Ng

Answers:


189

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

但是您不必相信我的话。我们已经发布了一个示例应用程序,使您可以并排比较五个库(壁画,毕加索,UIL,Glide和Volley Image Loader)的性能。您可以在我们的GitHub存储库中获得它。

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

壁画提供的功能毕加索,UIL和Glide尚不具备:

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

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


1
谢谢,您是否可以将表格形式的“我们发布了一个示例应用程序,使您可以比较五个库的性能”的结果附在答案上?
mmlooloo

1
壁画有一些比别人更多的功能,而且也更强壮..
ligi

4
他们在链接的后面添加了“ s”。github.com/facebook/fresco/tree/master/samples
JR Tan

@tyronen im对壁画感兴趣。是否允许从网络加载本地图像?谢谢
GmloMalo 2015年

1
@wedi是的。
tyronen '18 -10-5

131

提醒您,这是一个高度基于意见的问题,因此我停止制造峡湾,并做了一张快速餐桌

在此处输入图片说明

现在库比较比较困难,因为在很多参数上,这四个参数几乎都做相同的事情,除了Fresco可能是因为其中有很多新的内存级别优化,所以让我知道您是否想要某些参数请根据我的经验进行比较。

最少使用Fresco,随着我继续使用并了解当前漏洞利用方法,答案可能会演变。将used personally制作完成的应用程序具有被使用的库ATLEAST一次。

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


1
我对Fresco的“可定制性”,“网络图像使用”和“易用性”评级较低感到好奇。这些评级的依据是什么?
tyronen

1
主要是首次使用,将使用壁画有更多的了解,这个答案可能会
有所

1
@Slartibartfast您是否有机会尝试壁画和最新的Glide 3.0版本?您还会对它们进行相同的评分吗?
Shobhit Puri

2
您错过了一个重要方面。图书馆的规模 这是Picasso和UImageLoader不支持GIF的主要原因。许可证也应该包括在内。
Codeversed

3
@AhamadullahSaikat他个人使用的那些。
皮埃尔

112

壁画 来源 | 异地
(-)
-库很大
-不能使用视图和位图参数进行回调
-SimpleDraweeView不支持wrap_content-
很大的缓存
(+)
-相当快的图像加载器(用于中小型图像)
-大量功能(流,绘图工具,存储管理等)
-可以设置直接在XML(例如圆角)
- GIF支持
-的WebP和动画WebP的支持


毕加索 资源 | 异地
(-)
-缓慢地将大图像从Internet加载到ListView
(+)
-库
很小
- 缓存很小-使用简单 -UI
不冻结
-WebP支持


滑翔

( - )
-大库的大小
(+)
-缓存自带的大小
-应用简单
-支持GIF格式
- WebP的支持
-从互联网上快速装载大图像到ListView控件
- UI不会冻结
- BitmapPool重新使用内存和因此较少的GC事件


通用图像加载器

(-)
-功能有限(图像处理受限)
-自2015年11月27日起,项目支持就停止了
(+)
-库的大小很小
-使用简单


由我在SGS2(Android 4.1)(WiFi 8.43 Mbps)上
进行了测试,Java的正式版本,而不是Xamarin!
2015年10月19日,

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


4
“非常快速的图像加载器”似乎与Fresco的“应用程序冻结”相矛盾。
TWiStErRob '16

2
我在Xamarin项目中有毕加索,并且内存使用量很大(用于将图像加载到回收器视图中)。OutOfMemory一直……
Vahid Amiri

@ VSG24有2个选项:1)您使用错误。2)Xamarain的Android(java)版本的库并不相同
Volodymyr Kulyk '16

1
作为Glide负片(-),我经历了很多闪烁。加载的图像会无处“重设”
FRR

1
@RJFares我最近尝试了最新版本,可以使用ImagePipelineConfig.setDownsampleEnabled(true)它来防止其冻结。但是它有时会跳过GIF的帧。如果您仅在应用程序上显示静态图像,我想您可以尝试一下。
Kimi Chiu

109

这些答案完全是我的看法

答案

  1. 毕加索是一种易于使用的图像加载器,Imageloader也是如此。壁画使用一种不同的方法来加载图像,我还没有使用过,但是我觉得它更像是一种从网络获取图像并将其缓存然后显示图像的解决方案。然后另一种方式,例如Picasso / Imageloader / Glide,对我来说更像是在屏幕上显示图像,它也确实从网络获取图像并将其缓存。

  2. Glide试图与Picasso互换性,我认为当他们创建Picasso时,其思维方式遵循HTTP规范,并让服务器决定缓存策略并缓存完整大小并按需调整大小。Glide与遵循HTTP规范相同,但是通过做出一些不同的假设(例如,缓存调整大小后的图像而不是完整大小的图像,并显示具有RGB_565而不是RGB_8888的图像)来尝试减小内存占用。这两个库均提供对默认设置的完全自定义。

  3. 关于哪个库最适合使用,真的很难说。Picasso,Glide和Imageloader是受人尊敬且经过良好测试的库,它们都易于使用默认设置使用。毕加索和Glide都只需要一行代码即可加载图像,并具有占位符和错误图像。自定义行为也不需要太多工作。Imageloader也是如此,后者也是比Picasso和Glide还要老的库,但是我没有使用过它,所以关于性能/内存使用/自定义的内容并不能多说,但是查看github上的自述文件给我的印象是相对易于使用和设置。因此,在选择这三个库中的任何一个时,您都不会做出错误的决定,这更多地取决于个人喜好。就像facebook SDK尚未在mavenCentral上正式发布一样,自2014年9月以来我还不习惯使用Facebook sdk,似乎他们已于2014年10月在mavenCentral上发布了第一个版本。因此,要花点时间我们还需要一些时间。关于它的好意见。

  4. 我认为这3个知名图书馆之间没有显着差异。唯一脱颖而出的是壁画,但这是因为它采用了不同的方法,并且是新颖的,没有经过战斗测试。


3
次要点:Facebook SDK似乎已经在Maven Central上作为AAR正式提供了一段时间。developers.facebook.com/docs/android/…–
orip

1
thx进行更正,自从我使用facebook SDK以来已经有一段时间了,所以我没有进行检查。他们仍然花了很长时间才穿上去。
神盾局2015年

1
阅读本文一年后,我仍然想知道是否应该使用Frescoe,但我仍然不知道为什么要这样做。当Glide和Picasso开箱即用时,Frescoe只是需要您做很多事情,以致看起来不值得和它的大小……
。– frostymarvelous

我想指出的是,壁画有记忆问题:github.com/facebook/react-native/issues/8711
Fabian Zeindl '16

我也经历了壁画的内存问题,不幸的是,如果需要动画gif支持,它似乎必须是壁画或滑行。同样,FWIW 这里是一些其他比较详细信息的链接
尼克

63

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

我更喜欢哪一个?尽管我使用Picasso的时间很长,但我必须承认我现在更喜欢Glide。但我建议您将位图格式更改为ARGB_8888,并让Glide缓存全尺寸图像并先调整大小。其余的将使您的工作做好!

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

+1对于Picasso Palette Helper

有一篇文章谈论了很多关于毕加索与滑翔的文章


优秀的文章。我现在要切换到Glide。比我想的还要好于毕加索。:)
Sufian

1
我看到的一个问题是Glide需要API10。这有点问题,因为我无法从我的应用中删除对API 9的支持。否则肯定是更好的方法。
Sufian

您能解释一下为什么要使用api 9吗?只是好奇...
Daniel Gomez Rico

除非我缺少任何东西,否则它将支持所有Gingerbread版本。
Sufian

1
我认为这有点主观。但是,最好支持尽可能多的设备/版本。没有?:)
Sufian

18

我想与大家分享我在毕加索,Universal Image Loader和Glide中所做的基准测试https : //bit.ly/1kQs3QN

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

我建议使用Universal Image Loader,因为它具有自定义功能,内存消耗量以及大小和方法之间的平衡。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.