Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gatherheart/a59ddeb247a2b60ef6aa0a3fba3274cd to your computer and use it in GitHub Desktop.
Save gatherheart/a59ddeb247a2b60ef6aa0a3fba3274cd to your computer and use it in GitHub Desktop.
이미지 캐싱 오픈소스 라이브러리에 대한 요약/정리

성능 비교하기

  • 테스트앱
  • 낮은 해상도 = 사진 크기: 10 ~ 50KB
  • 중간 해상도 = 사진 크기: 100 ~ 500KB + 5MB
  • 높은 해상도 = 사진 크기: 10 ~ 50MB
  • 기본 설정 = 설정: 메모리 100MB 디스크 150MB
  • 리사이즈 = (화면 너비 / 3)^2. iPhone 8+ 기준으로 414 pixel.

리사이즈 없이 테스트

  • 낮은 해상도

    • SDWebImage, Kingfisher, AlamofireImage 모두 메모리 60 ~ 70MB 사용.
    • 속도에 큰 차이 없음.
  • 중간 해상도

SDWebImage KingFisher AlamofireImage
메모리 사용량 80MB +- ~500MB ~200MB
기타 - 스크롤 버벅임/CPU가 튄다 캐싱이 잘 안됨1
  • 높은 해상도 / 리사이즈 없이 (설정: 메모리 300MB, 디스크 500MB)
SDWebImage KingFisher AlamofireImage
메모리 사용량 2GB +- ~4GB 1GB +-
디스크에 저장된 사진 크기 평균 11MB 평균 20MB -
기타 CPU가 튄다 back 버튼 누르면 버벅임/CPU가 튄다 캐싱이 잘 안됨

리사이즈 로직 넣어서 테스트

  • 중간 해상도 / 리사이즈 포함
SDWebImage KingFisher
메모리 사용량 60MB+ 50MB+
걸린 시간 12~13초 09~10초
  • 높은 해상도 / 리사이즈 포함
SDWebImage KingFisher
메모리 사용량 100MB 90MB
걸린 시간 40~60초 30~45초
기타 메모리/CPU가 가끔 튄다 -

GIF 로 테스트 (리사이즈 로직 없음)

SDWebImage KingFisher
CPU 150~200% ~120%
메모리 사용량 400MB 520MB
걸린 시간 10~12초 5초
기타 animate 가 바로 되지 않음 -

문제점

  • NSCache 가 생각대로 동작하지 않음

KingFisher (리사이즈 없이)

  • back 버튼을 누르거나 스크롤을 하면 간헐적으로 버벅임
  • 이미지를 다 불러오지 않고 back 버튼을 눌러서 나오기 > 다시 진입 > 나오기 를 반복하면 메모리 사용량이 계속 상승함
    • 이 경우 clearCache 해도 아무 효과 없음
    • KingfisherManager.shared.downloader.cancelAll() 하면 메모리 사용량이 줄어든다
    • SDWebImage 는 back 버튼을 눌러서 나오면 바로 메모리 사용량이 줄어듬
  • 따라서 Kingfisher 를 쓸 때는 반드시 resize processor 를 넣어줘야 할 듯하다

Kingfisher (GIF)

  • gif url 에 대해 ResizingImageProcessor 를 쓰면 gif load 가 되지 않는다 (다른 Processor 도 마찬가지)
  • 따라서 gif 인 경우와 그렇지 않은 경우를 직접 구분해 줘야 한다.

SDWebImage

  • 용량이 큰 사진들을 불러올 때, GIF 를 여러 개 불러올 CPU가 가끔 튄다

기능 비교하기

SDWebImage KingFisher AlamofireImage
이미지 썸네일 처리 없는 것과 마찬가지(향후 개선 예정) 없음 없음
GIF 지원 여부 subspec 으로 지원하고 있음 지원함 지원하지 않음 (직접 구현해야 함)
이미지 프로세싱 지원하지 않음 (직접 구현해야 함) 지원함 지원함
Progressive JPEG 지원 지원함 지원하지 않음 지원하지 않음

각각에 대한 요약/정리

1 이미지 불러오던 도중에 back 버튼 눌러서 나갔다가 다시 들어오면, 이전에 불러왔던 이미지가 보이지 않음

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment