2017-02-05 1 views
1

HTTP 요청 및 오프라인 사용에 대한 지원 추가와 관련하여 앱 최적화 작업을 시작하려고합니다.네트워크 요청 및 오프라인 사용과 관련하여 iOS 앱 최적화

일반적인 생각은 사용자가 데이터가 이미 캐시에서 사용 가능한 경우 네트워크 요청을 기다리지 않고 가능한 한 원활하게 앱을 만들고 싶다는 것입니다.

Cache-Control 헤더를 하루 만 설정하면이 메시지는 NSURLCache에 의해 처리됩니다. 문제는 서버 리소스가 때때로 (매일, 매주 또는 매월) 변경되기 때문에 사용자가 오래된 데이터를 가지게된다는 것입니다. 아직까지도 데이터가 최신 상태가 될 가능성이 높기 때문에 사용자가 캐시에 적어도 뭔가가 있으면 데이터를 기다릴 필요가 없기를 바란다. 데이터가 으로부터로드로 (사용자에게 returnCacheDataDontLoad

  • 표시를 캐시에서 더 대기이 데이터를 데이터를로드하지 강제로

    1. 시도 :

      그러므로 나는 다음과 같은 솔루션을 구현에 대해 생각하고 로컬 캐시)

    2. 캐시를 무시하여 서버에서 자원을로드 번째 요청을 실행 reloadIgnoringLocalCacheData
    3. 는 사이 DIFF 만들기 서버에서

      let configuration = URLSessionConfiguration.default 
      configuration.requestCachePolicy = .returnCacheDataDontLoad 
      
      self.sessionManager = Alamofire.SessionManager(configuration: configuration) 
      sessionManager!.request(.....) 
      

      강제로 데이터를로드 : 단계 캐시에서 4

    강제로 데이터를로드 (Alamofire)에서 DIFF에 따라 단계 1 화면에 3

  • 업데이트 데이터에서로드 된 데이터 :

    let configuration = URLSessionConfiguration.default 
    configuration.requestCachePolicy = .reloadIgnoringLocalCacheData 
    
    self.sessionManager = Alamofire.SessionManager(configuration: configuration) 
    
    sessionManager!.request(.....) 
    

    누군가가 통신 할 수 있다면 정말 고맙겠습니다. ent 제안 솔루션 및 가능성이 그것을 비판 또는 조언을 차이 해결책은 정말이 올바른 방법으로하고 싶습니다.

    미리

    주석의 요청으로
  • +0

    몇 가지 해결책을 찾아 보셨습니까? 아마도 당신은 공유 할 수 있습니다. –

    답변

    0

    에 감사합니다, 여기에 내가 함께 결국 솔루션입니다 : NSURLCache를 사용하는 것보다 오히려

    , 나는 영역을 사용하여 내 자신의 '캐시 층'(link를 작성 결국). 그들은 정말 멋진 API를 가지고 있으며 기본적으로 데이터를 상자 밖으로 동기화합니다. 또한 Realm notifications (옵저버 패턴) 개념을 사용하여 데이터가 변경 될 때마다 diff를 사용하여 콜백을받습니다.

    관련 문제