티스토리 뷰

오랜만에 iOS 를 다시하려니.. 

쉽지는 않다 

간단한 3개의 column 을 가진 갤러리인데 왜 이것저것 문제가 생기는지 원

무튼..

 

 

TargetSize 가 클 때 버벅이는 문제점

 

PHImageManager 를 이용해 requestImage 후

UICollectionViewCell 에 image 를 채워주는 코드다.

let asset = self.fetchResult[indexPath.item]
cell.requestIdentifier = asset.localIdentifier
self.imageManager.requestImage(for: asset,
                               targetSize: targetSize,
                               contentMode: .aspectFill,
                               options: nil) { (image, info) in
      if let image = image,
          cell.requestIdentifier == asset.localIdentifier {
          cell.refreshImage(image)
      }
}

 

여기서 targetSize 가 360을 초과할 때 문제가 생긴다. 

target size 를 cell size * UIScreen.main.scale 로 표시할 때

375 이상 단말에서 발생한다.

(iPhone Xs, iPhone 12 Pro Max 모두 동일)

let targetSize = CGSize(width: cell.bounds.size.width * UIScreen.main.scale,
                        height: cell.bounds.size.height * UIScreen.main.scale)

 

 

 

requestImage Loading 시간 Test

환경은 iPhone Xs, iOS 14.3 이다.

 

targetSize = CGSize(width: 360, height: 360)

loadImage 133.6190700531006ms
loadImage 86.13002300262451ms
loadImage 81.03799819946289ms
loadImage 76.26807689666748ms
loadImage 72.24202156066895ms
loadImage 68.07899475097656ms
loadImage 59.33105945587158ms
loadImage 54.16405200958252ms
loadImage 49.3619441986084ms
loadImage 44.40498352050781ms
loadImage 39.225101470947266ms
loadImage 35.03704071044922ms
loadImage 30.121922492980957ms
loadImage 25.251030921936035ms
loadImage 7.327914237976074ms
loadImage 16.730070114135742ms
loadImage 10.842084884643555ms
loadImage 11.767029762268066ms
loadImage 7.25400447845459ms
loadImage 6.973981857299805ms
loadImage 7.227897644042969ms
loadImage 6.693005561828613ms
loadImage 7.0389509201049805ms

최초 로드 시 조금 overload 가 있을 뿐, 이후에는 cache 도 되는 것으로 보인다. 

 

 

 

targetSize = CGSize(width: 361, height: 361)

loadImage 580.5469751358032ms
loadImage 622.2449541091919ms
loadImage 673.117995262146ms
loadImage 610.7490062713623ms
loadImage 574.8450756072998ms
loadImage 599.7929573059082ms
loadImage 411.51106357574463ms
loadImage 426.4489412307739ms
loadImage 409.8759889602661ms
loadImage 472.31197357177734ms
loadImage 468.2660102844238ms
loadImage 527.7990102767944ms
loadImage 534.7820520401001ms
loadImage 591.8979644775391ms
loadImage 598.7859964370728ms
loadImage 104.32195663452148ms
loadImage 98.97208213806152ms
loadImage 172.6769208908081ms
loadImage 182.95001983642578ms
loadImage 255.5069923400879ms
loadImage 247.4379539489746ms
loadImage 309.08799171447754ms
loadImage 305.5839538574219ms
loadImage 357.0899963378906ms
loadImage 337.4519348144531ms
loadImage 392.5809860229492ms
loadImage 388.3800506591797ms
loadImage 437.3970031738281ms
loadImage 429.92091178894043ms
loadImage 490.8970594406128ms
loadImage 464.81597423553467ms
loadImage 521.8160152435303ms
loadImage 507.76004791259766ms
loadImage 567.1910047531128ms
loadImage 552.5209903717041ms
loadImage 578.2270431518555ms
loadImage 611.9949817657471ms
loadImage 646.6279029846191ms
loadImage 631.3750743865967ms
loadImage 608.3649396896362ms

한 장 로드하는데 0.6초씩 걸릴 때도 있다.

스크롤 해도 cache 되지 않아 이미지를 로드하는데 오랜 시간이 걸린다. 

360.1 로 해도 마찬가지로 느리다.

 

 

결론

PHImageManager 의 requestImage 시 targetSize 가 360 을 초과한 것이라면 성능상 사용할 수 없을 정도의 속도가 나온다.

iPhone Xs, iPhone Xs Max, iPhone 12 Pro Max 모두 마찬가지이다.

 

PHCachingImageManager 는 scroll 시 다음 Cell 에 그려질 asset 에 대해 cache 하는 것이므로

최초 화면을 보여줄 때는 똑같이 Load 가 걸려 사용에 큰 의미는 없다...

 

우선은 size 를 제한해보려하는데.. 이것만이 답일지 잘 모르겠다.

 

 

 

 

 

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함