- 테스트앱
- 낮은 해상도 = 사진 크기: 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가 가끔 튄다 | - |
SDWebImage | KingFisher | |
---|---|---|
CPU | 150~200% | ~120% |
메모리 사용량 | 400MB | 520MB |
걸린 시간 | 10~12초 | 5초 |
기타 | animate 가 바로 되지 않음 | - |
- NSCache 가 생각대로 동작하지 않음
- back 버튼을 누르거나 스크롤을 하면 간헐적으로 버벅임
- 이미지를 다 불러오지 않고 back 버튼을 눌러서 나오기 > 다시 진입 > 나오기 를 반복하면 메모리 사용량이 계속 상승함
- 이 경우 clearCache 해도 아무 효과 없음
- KingfisherManager.shared.downloader.cancelAll() 하면 메모리 사용량이 줄어든다
- SDWebImage 는 back 버튼을 눌러서 나오면 바로 메모리 사용량이 줄어듬
- 따라서 Kingfisher 를 쓸 때는 반드시 resize processor 를 넣어줘야 할 듯하다
- gif url 에 대해 ResizingImageProcessor 를 쓰면 gif load 가 되지 않는다 (다른 Processor 도 마찬가지)
- 따라서 gif 인 경우와 그렇지 않은 경우를 직접 구분해 줘야 한다.
- 용량이 큰 사진들을 불러올 때, GIF 를 여러 개 불러올 CPU가 가끔 튄다
SDWebImage | KingFisher | AlamofireImage | |
---|---|---|---|
이미지 썸네일 처리 | 없는 것과 마찬가지(향후 개선 예정) | 없음 | 없음 |
GIF 지원 여부 | subspec 으로 지원하고 있음 | 지원함 | 지원하지 않음 (직접 구현해야 함) |
이미지 프로세싱 | 지원하지 않음 (직접 구현해야 함) | 지원함 | 지원함 |
Progressive JPEG 지원 | 지원함 | 지원하지 않음 | 지원하지 않음 |
1 이미지 불러오던 도중에 back 버튼 눌러서 나갔다가 다시 들어오면, 이전에 불러왔던 이미지가 보이지 않음 ↩