Picasso v / s Imageloader v / s Fresco vs Glide [ปิด]


344

ผลการวิจัย:

  1. ความแตกต่างระหว่างImageLoader Picasso v / s ที่นี่ ...
  2. ข้อมูลเกี่ยวกับไลบรารี่ไลบรารีที่นี่ ...
  3. ตอนนี้เมื่อเร็ว ๆ นี้ Facebook เปิดตัวห้องสมุดภาพใหม่ที่ชื่อว่า Fresco

คำถาม:

  1. อะไรคือความแตกต่างระหว่าง Picasso v / s Imageloader v / s Fresco
  2. เมื่อไหร่ที่เราสามารถใช้ร่อน
  3. ซึ่งเป็นห้องสมุดที่ดีที่สุดที่จะใช้
  4. หากห้องสมุดแต่ละแห่งมีความสำคัญของตัวเองพวกเขาจะเป็นอย่างไร

ฉันสนใจในปูนเปียกด้วย ทุกคนสามารถอธิบายความแตกต่างได้หรือไม่
Krit


8
นี่ไม่ใช่สถานที่สำหรับถามคำถามตามความคิดเห็น
danny117

16
@ danny117 แล้วเราจะทำอะไรที่นี่ถ้าเราไม่มีความคิดเกี่ยวกับมัน
Anand Savjani

2
@ShobhitPuri เครื่องมือนี้จะช่วยให้คุณตรวจสอบจำนวนวิธี
นิโคลัส Ng

คำตอบ:


189

ฉันเป็นหนึ่งในวิศวกรของโครงการเฟรสโก เห็นได้ชัดว่าฉันลำเอียง

แต่คุณไม่ต้องใช้คำพูดของฉันมัน เราได้เปิดตัวแอปตัวอย่างที่ให้คุณเปรียบเทียบประสิทธิภาพของห้องสมุดทั้งห้าแห่ง ได้แก่ Fresco, Picasso, UIL, Glide และ Loley Image Loader - เคียงข้างกัน คุณจะได้รับมันในrepo GitHub ของเรา

ฉันควรจะชี้ให้เห็นว่า Fresco มีให้บริการใน Maven Central เช่นcom.facebook.fresco:frescoกัน

Fresco เสนอคุณสมบัติที่ Picasso, UIL และ Glide ยังไม่มี:

  1. รูปภาพไม่ได้ถูกจัดเก็บใน Java heap แต่อยู่ใน ashmem heap บัฟเฟอร์ไบต์กลางจะถูกเก็บในฮีปดั้งเดิมด้วย ทำให้มีหน่วยความจำเพิ่มมากขึ้นสำหรับแอปพลิเคชั่นที่จะใช้ จะช่วยลดความเสี่ยงของ OutOfMemoryErrors นอกจากนี้ยังลดปริมาณแอปขยะที่ต้องทำซึ่งนำไปสู่ประสิทธิภาพที่ดีขึ้น
  2. สามารถสตรีมภาพ JPEG แบบโปรเกรสซีฟได้เช่นเดียวกับในเว็บเบราว์เซอร์
  3. รูปภาพสามารถครอบตัดทุกจุดไม่ใช่เฉพาะกึ่งกลาง
  4. ภาพ JPEG สามารถปรับขนาดได้อย่างเป็นธรรมชาติ วิธีนี้จะช่วยหลีกเลี่ยงปัญหาของ OOMing ในขณะที่พยายามลดขนาดรูปภาพ

มีคนอื่นอีกหลายคน ( ดูเอกสารประกอบของเรา ) แต่สิ่งเหล่านี้สำคัญที่สุด


1
ขอขอบคุณคุณสามารถแนบผลลัพธ์ของ "เราได้เปิดตัวแอปตัวอย่างที่ให้คุณเปรียบเทียบประสิทธิภาพของห้องสมุดทั้งห้าแห่ง" ในรูปแบบตารางกับคำตอบของคุณหรือไม่
mmlooloo

1
Fresco มีคุณสมบัติบางอย่างมากกว่าคนอื่น ๆ แต่ยังเป็นวิธีที่ใหญ่กว่า ..
ligi

4
พวกเขาเพิ่ม 's' ที่ด้านหลังของลิงก์ github.com/facebook/fresco/tree/master/samples
JR Tan

@tyronen ฉันสนใจ Fresco มันอนุญาตให้โหลดภาพท้องถิ่นแทนจากเครือข่ายหรือไม่ ขอบคุณ
GmloMalo

1
@wedi ใช่มันเป็น
tyronen

131

โปรดทราบว่านี่เป็นคำถามที่อิงตามความคิดเห็นสูงดังนั้นฉันจึงหยุดทำฟยอร์ดและทำตารางด่วน

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้การเปรียบเทียบไลบรารี่นั้นยากเพราะพารามิเตอร์หลายตัวทั้งสี่ตัวทำสิ่งเดียวกันยกเว้นเฟรสโกเพราะอาจมีการเพิ่มประสิทธิภาพระดับหน่วยความจำใหม่ทั้งหมดในนั้นดังนั้นแจ้งให้เราทราบหากพารามิเตอร์บางอย่างที่คุณต้องการ ดูการเปรียบเทียบตามประสบการณ์ของฉัน

การใช้ Fresco อย่างน้อยที่สุดคำตอบอาจมีวิวัฒนาการในขณะที่ฉันยังคงใช้และเข้าใจมันสำหรับการหาประโยชน์ในปัจจุบัน used personallyจะมีการใช้ห้องสมุดอย่างน้อยครั้งหนึ่งในแอปพลิเคเสร็จสมบูรณ์

* หมายเหตุ - ตอนนี้ Fresco รองรับ GIF และภาพเคลื่อนไหว WebP แล้ว


1
ฉันอยากรู้เกี่ยวกับการจัดอันดับ 'ปรับแต่งได้', 'การใช้อิมเมจเครือข่าย' และ 'ใช้งานง่าย' สำหรับ Fresco พื้นฐานของการจัดอันดับเหล่านี้คืออะไร?
tyronen

1
ส่วนใหญ่ใช้งานครั้งแรกจะใช้ Fresco อีกเล็กน้อยที่จะเข้าใจคำตอบนี้อาจมีวิวัฒนาการ :)
Vrashabh Irde

1
@Slartibartfast คุณมีโอกาสลอง Fresco และ Glide 3.0 เวอร์ชั่นล่าสุดหรือไม่? คุณจะให้คะแนนพวกเขาเหมือนเดิมหรือไม่
Shobhit Puri

2
คุณพลาดสิ่งสำคัญอย่างหนึ่ง ... ขนาดห้องสมุด นี่คือเหตุผลหลักที่ Picasso และ UImageLoader ไม่รองรับ GIF ใบอนุญาตก็จะเป็นสิ่งที่ดีที่จะรวม
Codeversed

3
@AhamadullahSaikat สิ่งที่เขาใช้เป็นการส่วนตัว
Pierre

112

Fresco แหล่ง | นอกไซต์
(-)
- ไลบรารีขนาดใหญ่
- ไม่มีการเรียกกลับด้วยมุมมอง, พารามิเตอร์ Bitmap
- SimpleDraweeView ไม่รองรับ wrap_content
- แคชขนาดใหญ่
(+)
- ตัวโหลดรูปภาพสวยเร็ว (สำหรับรูปภาพขนาดกลาง &&)
- ฟังก์ชั่นมากมาย (สตรีมมิ่งเครื่องมือวาดภาพการจัดการหน่วยความจำ ฯลฯ )
- ความเป็นไปได้ในการตั้งค่าโดยตรงใน xml (ตัวอย่างเช่นมุมมน)
- รองรับ GIF
- รองรับWebP และ Animated Webp


แหล่ง Picasso | นอกไซต์
(-)
- โหลดภาพขนาดใหญ่จากอินเทอร์เน็ตไปยัง ListView
(+) ช้าลง
- ขนาดไลบรารีไม่
ใหญ่
- แคชขนาดเล็ก- ใช้งานง่าย
- UI ไม่หยุด
- รองรับ WebP


แหล่ง Glide

(-)
- ไลบรารีขนาดใหญ่
(+)
- ขนาดแคชของ Tinny
- ใช้งานง่าย
- รองรับ GIF
- รองรับ WebP
- โหลดรูปภาพขนาดใหญ่จากอินเทอร์เน็ตไปยัง ListView ได้อย่างรวดเร็ว
- UI ไม่หยุดทำงาน
- BitmapPool เพื่อนำหน่วยความจำ เหตุการณ์ GC น้อยลง


แหล่งที่มา Universal Image Loader

(-)
- ฟังก์ชั่นที่ จำกัด (การประมวลผลภาพ จำกัด )
- การสนับสนุนโปรเจ็กต์หยุดลงตั้งแต่ 27.11.2015
(+)
- ขนาดไลบรารี Tinny
- ใช้งานง่าย


ทดสอบโดยฉันใน SGS2 (Android 4.1) (WiFi 8.43 Mbps)
เวอร์ชันทางการสำหรับ Java ไม่ใช่สำหรับ Xamarin!
19 ตุลาคม 2558

ฉันชอบใช้ Glide
อ่านเพิ่มเติมที่นี่
วิธีเขียนแคชไปยัง External Storage (SD Card)ด้วย Glide


4
"ตัวโหลดรูปภาพที่ค่อนข้างเร็ว" ดูเหมือนจะขัดแย้งกับ "การตรึงแอพ" สำหรับ Fresco
TWiStErRob

2
ฉันมี Picasso ในโครงการ Xamarin และการใช้หน่วยความจำมีขนาดใหญ่มาก (เคยโหลดภาพลงในมุมมองรีไซเคิล) OutOfMemoryตลอดเวลา ...
Vahid Amiri

@ VSG24 มี 2 ตัวเลือก: 1) คุณใช้ผิด 2) เวอร์ชัน lib (Java) ของ lib ไม่เหมือนกันสำหรับ Xamarain
Volodymyr Kulyk

1
ในฐานะที่เป็น Glide เป็นค่าลบ (-) ฉันมีอาการริบหรี่มากมาย รูปภาพที่โหลดจะได้รับ "ตั้งค่าใหม่" จากที่อื่น
FRR

1
@RJFares ฉันลองใช้เวอร์ชันล่าสุดเมื่อเร็ว ๆ นี้คุณสามารถใช้ImagePipelineConfig.setDownsampleEnabled(true)เพื่อป้องกันการแช่แข็ง แต่บางครั้งก็ข้ามเฟรมของ GIF หากคุณแสดงเฉพาะภาพนิ่งบนแอปของคุณฉันคิดว่าคุณสามารถลองดูได้
Kimi Chiu

109

คำตอบเหล่านี้ล้วนเป็นความคิดเห็นของฉัน

คำตอบ

  1. Picasso เป็นโปรแกรมสร้างภาพที่ใช้งานง่ายและเป็นไปได้สำหรับ Imageloader Fresco ใช้วิธีการต่าง ๆ ในการโหลดรูปภาพฉันยังไม่ได้ใช้มัน แต่มันก็ดูเหมือนฉันมากขึ้นเช่นวิธีการรับภาพจากเครือข่ายและแคชพวกเขาแล้วแสดงภาพ วิธีอื่น ๆ เช่น Picasso / Imageloader / Glide ซึ่งสำหรับฉันมีมากขึ้นแสดงภาพบนหน้าจอที่ยังได้รับภาพจากเครือข่ายและแคชพวกเขา

  2. Glide พยายามที่จะใช้แทนกันได้กับ Picasso ฉันคิดว่าเมื่อพวกเขาสร้างชุดความคิดของ Picasso นั้นเป็นไปตามข้อมูลจำเพาะ HTTP และให้เซิร์ฟเวอร์ตัดสินใจนโยบายการแคชและแคชขนาดเต็มและปรับขนาดตามความต้องการ Glide นั้นเหมือนกันกับการทำตาม HTTP spec แต่พยายามที่จะมี footprint หน่วยความจำขนาดเล็กลงโดยการตั้งสมมติฐานที่แตกต่างกันบางอย่างเช่นแคชภาพที่ปรับขนาดแทนภาพขนาดเต็มและแสดงภาพด้วย RGB_565 แทน RGB_8888 ไลบรารีทั้งสองมีการปรับแต่งการตั้งค่าเริ่มต้นเต็มรูปแบบ

  3. ห้องสมุดไหนดีที่สุดในการใช้งานก็ยากที่จะพูด Picasso, Glide และ Imageloader เป็นที่ยอมรับและผ่านการทดสอบเป็นอย่างดีซึ่งทั้งหมดนี้ใช้งานง่ายด้วยการตั้งค่าเริ่มต้น ทั้ง Picasso และ Glide ต้องการโค้ดเพียง 1 บรรทัดในการโหลดอิมเมจและมีตัวยึดและอิมเมจข้อผิดพลาด การปรับแต่งพฤติกรรมยังไม่ต้องการการทำงานมาก Same ไปสำหรับ Imageloader ซึ่งเป็นห้องสมุดเก่าแล้ว Picasso และ Glide แต่ฉันไม่ได้ใช้ดังนั้นไม่สามารถพูดได้มากเกี่ยวกับประสิทธิภาพ / การใช้งานหน่วยความจำ / การปรับแต่ง แต่การดู readme บน github ทำให้ฉันรู้สึกว่ามันยัง ใช้งานง่ายและตั้งค่าได้ง่าย ดังนั้นในการเลือกห้องสมุดทั้งสามนี้คุณไม่สามารถตัดสินใจผิดได้มันเป็นเรื่องของรสนิยมส่วนตัวมากกว่าเช่น facebook SDK ยังไม่เปิดอย่างเป็นทางการใน mavenCentralฉันไม่ได้ใช้กับ facebook sdk ตั้งแต่ sept 2014 และดูเหมือนว่าพวกเขาวางเวอร์ชันแรกออนไลน์บน mavenCentral ในเดือนตุลาคม 2014 ดังนั้นจะใช้เวลาสักครู่ก่อนที่เราจะได้รับอะไร ความคิดเห็นที่ดีเกี่ยวกับมัน

  4. ระหว่าง 3 ห้องสมุดชื่อใหญ่ฉันคิดว่าไม่มีความแตกต่างอย่างมีนัยสำคัญ สิ่งเดียวที่โดดเด่นคือปูนเปียก แต่นั่นเป็นเพราะมันมีแนวทางที่แตกต่างและเป็นของใหม่และไม่ใช่การทดสอบการต่อสู้


3
ผู้เยาว์เล็กน้อย: ดูเหมือนว่า Facebook SDK ได้เปิดให้บริการอย่างเป็นทางการใน AAR ใน Maven Central มาระยะหนึ่งแล้ว developers.facebook.com/docs/android/…
orip

1
ขอบคุณสำหรับการแก้ไขมันไม่นานมานี้ตั้งแต่ฉันใช้ facebook SDK ดังนั้นฉันจึงไม่ได้ตรวจสอบ ถึงกระนั้นพวกเขาก็ใช้เวลานานเกินไปที่จะใส่มัน
Aegis

1
หนึ่งปีที่ผ่านมาหลังจากอ่านบทความนี้ฉันยังคงสงสัยว่าฉันควรใช้ Frescoe หรือไม่และฉันก็ยังไม่สามารถเห็นได้ว่าทำไมฉันถึงควร ในขณะที่ Glide และ Picasso ออกกำลังกายนอกกรอบ Frescoe ต้องการให้คุณทำหลาย ๆ อย่างที่มันดูไม่คุ้มและขนาด ....
frostymarvelous

ฉันต้องการชี้ให้เห็นว่าปูนเปียกมีปัญหาเกี่ยวกับหน่วยความจำ: github.com/facebook/react-native/issues/8711
Fabian Zeindl

ฉันเคยประสบปัญหาเกี่ยวกับหน่วยความจำด้วยปูนเปียกด้วยโชคไม่ดีที่ดูเหมือนว่ามันจะต้องเป็นปูนเปียกหรือเหินหากคุณต้องการการสนับสนุน gif แบบเคลื่อนไหว นอกจากนี้ FWIW นี่คือลิงก์ไปยังรายละเอียดการเปรียบเทียบเพิ่มเติม
นิค

63

ทั้ง Glide และ Picasso ไม่สมบูรณ์แบบ วิธีที่ Glide โหลดภาพไปยังหน่วยความจำและทำการแคชดีกว่า Picasso ซึ่งทำให้ภาพโหลดเร็วขึ้น นอกจากนี้ยังช่วยป้องกันแอปจาก OutOfMemoryError ที่เป็นที่นิยม การโหลด GIF Animation เป็นคุณสมบัติการฆ่าที่จัดทำโดย Glide อย่างไรก็ตาม Picasso ถอดรหัสภาพที่มีคุณภาพดีกว่า Glide

ฉันชอบอันไหนดี? แม้ว่าฉันจะใช้ Picasso มานานมาก แต่ฉันต้องยอมรับว่าตอนนี้ฉันชอบ Glide แล้ว แต่ฉันขอแนะนำให้คุณเปลี่ยนรูปแบบบิตแมปเป็น ARGB_8888 และปล่อยให้ร่อนแคชทั้งภาพขนาดเต็มและปรับขนาดหนึ่งก่อน ที่เหลือก็จะทำงานของคุณให้ดี!

  • วิธีการนับของ Picasso และ Glide อยู่ที่ 840 และ 2678 ตามลำดับ
  • Picasso (v2.5.1) มีขนาดประมาณ 118KB ในขณะที่ Glide (v3.5.2) มีขนาดประมาณ 430KB
  • ร่อนสร้างภาพที่แคชต่อขนาดในขณะที่ Picasso บันทึกภาพเต็มและประมวลผลดังนั้นเมื่อโหลดมันจะแสดงเร็วขึ้นด้วย Glide แต่ใช้หน่วยความจำมากขึ้น
  • RGB_565ฉุยฉายใช้หน่วยความจำน้อยโดยเริ่มต้นด้วย

+1 สำหรับปีกัสโซPalette Helper

มีโพสต์ที่พูดคุยกันมากเกี่ยวกับ Picasso vs Glide โพสต์


บทความที่ยอดเยี่ยม ฉันเปลี่ยนมาใช้ Glide แล้ว ดียิ่งกว่าปิกัสโซไม่ใช่สิ่งที่ฉันมีอยู่ในใจ :)
Sufian

1
ปัญหาหนึ่งที่ฉันเห็นคือ Glide ต้องการ API 10 มันเป็นปัญหาเล็กน้อยเนื่องจากฉันไม่สามารถปล่อยการสนับสนุน API 9 จากแอปของฉัน มิฉะนั้นเป็นวิธีที่ดีกว่าที่จะไป
Sufian

คุณช่วยอธิบายได้ไหมว่าทำไมคุณถึงใช้ api 9 เพียงแค่อยากรู้อยากเห็น ...
แดเนียลโกเมซเปอร์โตริโก

นอกจากว่าฉันจะพลาดบางสิ่งไปก็สนับสนุนเวอร์ชั่น Gingerbread ทั้งหมด
Sufian

1
ฉันคิดว่ามันเป็นเรื่องส่วนตัว แต่มันเป็นสิ่งที่ดีกว่าที่จะรองรับอุปกรณ์ / รุ่นต่าง ๆ ให้ได้มากที่สุด ไม่มี? :)
Sufian

18

ฉันต้องการแบ่งปันมาตรฐานกับคุณที่ฉันได้ทำในPicasso, Universal Image Loader และ Glide : https://bit.ly/1kQs3QN

Fresco นั้นไม่ได้มาตรฐานเพราะสำหรับโครงการที่ฉันทำการทดสอบเราไม่ต้องการปรับโครงสร้างของเราใหม่ (เพราะมุมมองของ Drawee)

สิ่งที่ฉันแนะนำคือUniversal Image Loaderเนื่องจากการปรับแต่งการใช้หน่วยความจำและความสมดุลระหว่างขนาดและวิธีการ

หากคุณมีโครงการเล็ก ๆ ฉันจะไปหา Glide (หรือลองใช้ Fresco)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.