본문 바로가기
IT/Android

Image Load Library (Glide vs Picasso vs Fresco) feat. Image Caching

by YEON-DU 2021. 11. 3.
반응형

안드로이드에서 유명한 이미지 로드 라이브러리들은 대표적으로 Google의 Glide, Square의 Picasso, Facebook의 Fresco가 있다. 일단 이 이미지 로드 라이브러리를 비교해보기에 앞서, 안드로이드의 이미지 캐싱에 대해 알아보자!

 

이미지 캐싱은 왜 필요한가?

특정 URL 이미지를 매번 로드하는 것은 비효율적인 일이기 때문이다.

한번 로드된 이미지를 캐싱하여 사용하게 되면 '이미지 트래픽에 대한 비용 절감'과 'UX적인 속도 향상'이 일어나게 된다. 

 

Glide

Google 라이브러리.

장점 : 속도가 빠르다. 사용법이 간편하다. 캐시를 위해 적은 양의 메모리를 사용한다. gif, 애니메이션 default처리 등 다양한 부가 기능이 필요할 때 사용한다. 안드로이드 공식에서 추천하는 라이브러리.

단점 : 라이브러리 크기가 상당히 크다. 

 

Picasso

Square 라이브러리.

장점 : 라이브러리가 제일 가볍다. (메모리도 적게 차지한다.) 사용법이 가장 쉽다.

단점 : Glide와 Fresco보다는 속도가 느리다. gif는 사용할 수 없다. 기본 이미지 캐시가 크기 때문에 빠른 로딩을 원하면 resize 작업을 해야한다.

많은 대용량 이미지 처리를 할 필요없는 앱에 가장 적합하다.

 

Fresco

Facebook 라이브러리.

장점 : 속도가 가장 빠르다.

단점 : 사용법이 어렵다. ImageView 대신 DraweeView를 사용해야 한다. (DraweeView는 wrap_content를 지원하지 않으므로 url 요청시 이미지 크기를 정확히 알고있어야 한다)

대용량 이미지 처리를 하는 앱에 적합하다. (+ 숙련된 개발자)

 

로딩속도 : Fresco > Glide > Picasso

 

http://bumptech.github.io/glide/

https://square.github.io/picasso/

https://fresco.recrack.com/

 

 

Glide의 이미지 캐싱 정책

Best strategy to load images using Glide — Image loading library for Android

글라이드는 캐시를 체크할 때 다음과 같은 일을 한다.

 

1. 현재 리소스가 다른 View에서 표시되고 있는가? (Active resources)

2. 메모리에 존재하는가? (Memory Cache)

3. 리소스가 디코딩 및 변환되어 디스크에 기록되어 있는가? (Resource)

4. 디스크에 기록되어 있는가? (Data)

5. 4단계까지 리소스를 찾지 못하면 원본 소스로 돌아가서 데이터를 검색한다. (File, Url 등)

 

캐시는 LRU 알고리즘 기반으로 동작한다.

글라이드는 디폴트로 메모리 캐시를 사용한다. 사용하지 않으려면 skipMemoryCache(true)를 사용한다.

디스크 캐시를 사용하지 않으려면 diskCacheStrategy(DiskCacheStrategy.NONE)를 호출한다.

 

*LRU (Least Recently Used) 알고리즘 : 가장 오랜 시간동안 참조되지 않은 페이지를 교체하는 기법

 

 

 

DiskCacheStrategy

NONE : 디스크 캐시 사용 안함

SOURCE : 원본 이미지만 캐싱

RESULT : 변형된 이미지만 캐싱 (뷰 크기에 맞춘 이미지)

AUTOMATIC : 디폴트. 로컬 및 원격 이미지에 대해 최적의 전략을 사용

ALL: 원본 크기의 이미지 캐싱

 

 

참고자료

https://www.charlezz.com/wordpress/wp-content/uploads/2020/10/www.charlezz.com-glide-v4-glide-v4--by-charlezz.pdf

https://gift123.tistory.com/31

https://cntechsystems.tistory.com/32

https://jinsangjin.tistory.com/11

반응형

'IT > Android' 카테고리의 다른 글

navigateUp(), popBackStack() 차이  (0) 2021.04.18
AppbarLayout, CoordinatorLayout, Behavior  (0) 2021.04.07
Fragment에서 Back키 처리 방식  (0) 2021.04.04
21.04.03  (0) 2021.04.03
람다와 익명클래스 괴담  (0) 2021.03.14

댓글