2013-02-14 3 views
6

저는 회사의 제품 컬렉션을 보여주는 iPad (iOS 6 이상 실행) 용 웹 앱을 만들고 있습니다.iOS6 웹 앱의 최대 캐시 크기는 얼마이며 어떻게 확장 할 수 있습니까?

HTML5의 "cache.manifest"파일을 사용하여 모두 완벽하게 작동했습니다. 그러나 캐시가 약 50MB로 증가했기 때문에 iPad는 더 이상 응용 프로그램 데이터를 저장하지 않습니다. 50MB 대신 Safari 설정에 따라 캐시 크기가 0.1KB가되었습니다.

그래서 Safari 캐시의 실제 웹 캐시 제한은 무엇이며 응용 프로그램 캐시의 최대 용량을 늘릴 수있는 방법이 있습니까?

+0

에 체크 아웃 : 명확한 설명은 http://stackoverflow.com/questions/2772908/max-size-ipad-iphone-offline-application-cache – mattdlockyer

답변

12

편집 : 2 월 6 일 2014 : iOS7.1의 최대 캐시 크기는 300Mb입니다.

고객이 최근에이 정확한 질문을했기 때문에 조사를 실시했습니다. iOS6의 당으로

는 이러한 다른 두 가지가 있습니다 (내 모든 시험은 iOS6.1에서 수행 한) :

  • 모바일 사파리
  • 으로 액세스되는 별도로 .manifest를 사용하여 웹 사이트를, 웹 사이트에서 생성 된 홈 화면의 웹 응용 프로그램

.manifest가있는 웹 사이트는 최대 50MB의 캐시를 사용할 수 있으며 사용자 권한이 필요합니다. 더 이상 사용할 수 없습니다. 이 값은 설정/사파리/고급에서 찾아서 지울 수 있습니다. 캐시에 더 많은 정보를 넣으려고하면 error 이벤트가 실행되고 window.applicationCache.status은 유휴 상태가됩니다.

웹 응용 프로그램은 웹 사이트와 동일한 캐시를 공유하지 않습니다. 캐시 설정/safari/advanced를 지우면 홈 화면 webapp에 대한 작업이 수행되지 않습니다. 그것은 사용자 입력없이 캐시의 50mb 이상을 받아 들일 것이지만 정확히 얼마나 많이 (나는 성공적으로 오프라인으로 접근 할 수있는 60mb로 테스트했다.) 편집 : 83MB로 시도, 성공 나는 이것을 어디에서 알지 못한다. iOS 설정에서 데이터를 볼 수 있습니다. 나는 아무데도 추측하지 않는다.

테스트는 내가 spec을 찾을 때까지 ***의 고통이었습니다. iOS6에서 완벽하게 작동하는 API가 있습니다.

window.applicationCache.addEventListener('checking', onChecking); 
window.applicationCache.addEventListener('noupdate', onNoupdate); 
window.applicationCache.addEventListener('downloading', onDownloading); 
window.applicationCache.addEventListener('progress', onProgress); 
window.applicationCache.addEventListener('cached', onCached); 
window.applicationCache.addEventListener('updateready', onUpdateready);  
window.applicationCache.addEventListener('obsolete', onObsolete); 
window.applicationCache.addEventListener('error', onError); 

모든도, 아이폰 OS 6.1에 progress 작업 :
당신은 응용 프로그램 상태, 그리고 다음과 같은 이벤트가 (절단과 리스너 그래서, 내 코드에서 붙여 넣기) 무엇을 알려줍니다, window.applicationCache.status을 확인해야합니다 event.loadedevent.total

웹 응용 프로그램은 확인하여 시작한 다음 .manifest가 동일한 경우 noupdate을 발생시킵니다. 상태는 IDLE입니다. 별도로 .manifest가 변경 한 경우

는, 상태, DOWNLOADING이다 매니페스트에있는 각 파일에 대한 progress 이벤트가 발생 후 상태는 UPDATEREADYupdateready 화재입니다.

오프라인 일 경우 error 이벤트가 발생하고 상태는 IDLE입니다.

당신은 그것은 작동하지만 사양이 신뢰할 말한다

var online = navigator.onLine ? 'online' : 'offline'; 

와 온라인/오프라인 상태를 테스트 할 수 있습니다.

더 3 가지 마칩니다 :

내 매니페스트는 cache.manifest 이름이 <html manifest="cache.manifest">
  • 같이 선언 내 htaccess로는
  • 내 응용 프로그램은 <meta name="apple-mobile-web-app-capable" content="yes">
  • AddType text/cache-manifest manifestExpiresByType text/cache-manifest "access plus 0 seconds"을 가지고있다한다
    • 이 API를 사용하면 실제 상황을 쉽게 이해할 수 있습니다. 자신의 테스트를 꼭 해보십시오. 나는이 결과를 100 % 확신하지 못하거나 새로운 iOS 버전을 사용할 수 있습니다. 최대 크기를 더 테스트 할 것입니다.

    +0

    감사합니다! 나는 오늘이나 내일 후에 그것을 시도 할 것이다. – Jules

    +0

    웹 응용 프로그램 (홈 스크린에있을 때)은 두 번째에만 캐싱하는 것으로 보입니다. 캐시 된 이벤트가 성공적으로 시작된 두 번째 오류 이벤트가 처음 발생했습니다! 당신의 도움을 주셔서 감사합니다. – Jules