2012-01-18 3 views
2

HTML5 매니페스트를 사용하여 응용 프로그램을 오프라인으로 작업 할 수 있습니다. 리소스 (예 : /background.png)는 수시로 업데이트 될 수 있지만, 응용 프로그램이 오프라인이면 마지막으로 검색 한 버전이 사용하기에 적합합니다. 내가 원하는 동작은 브라우저가 온라인 일 경우 보통 /background.png을 요청하지만 요청이 오프라인이거나 서버가 다운 되었기 때문에 캐시 된 버전으로 폴백하는 것입니다.매니페스트 관리 리소스가 오프라인 일 때 자신의 캐시 된 복사본으로 폴백 할 수 있습니까?

NETWORK: 
/background.png 

같은 매니페스트 항목을 가지고 테스트, 자원을 요청하려고 항상 브라우저 했다. 오프라인 일 경우 appcache에서 사본을 리턴하지 않고 오류를 리턴합니다. 그건 내가 원하는 것이 아니지만, 네트워크가 내가 그것을 이해할 때 어떻게 행동해야하는지입니다.

나는 또한 그 말은 "당신이 새로운 하나를 얻을 수없는 경우 다시 캐시 사본 가을"수 희망

FALLBACK: 
/background.png /background.png 

을 시도하지만, 그 구성에 브라우저가 자원을 요청하려고하지 않습니다 그것이 온라인 인 경우. 그리고 의 img SRC = "background.png"에 대해 한 번 (요청 두 번 같은 자원을 가진 번 -

내가 생각 또 다른 가능성은

CACHE: 
/offline-background.png 

FALLBACK: 
/background.png /offline-background.png 

하지만 같은 자원에 대한 두 개의 서로 다른 이름을 가지고 있었다 캐시 된 오프라인 사본의 경우) - 매력없는 해킹처럼 보였습니다.

background.png이 변경되었지만 매니페스트의 모든 내용을 브라우저가 확인하게되면 매니페스트를 임의로 변경할 수도 있습니다.

HTML5 매니페스트에서 '새 것을 얻을 수 없다면 가지고있는 것을 사용'할 수 있습니까? 이것은 합리적인 패턴처럼 보입니다. 그래서 나는 그것을 할 수있는 깨끗한 방법이있을 것이라고 생각합니다. 그렇지 않다면 누구나 다른 접근법을 제안 할 수 있습니까? 미리 감사드립니다!

EDIT : 원본 질문은 "news.json"을 참조하여 리소스가 JavaScript에 의해 검색되었음을 암시하지만 "background.png"로 변경하여 내가하고 싶은 것을 명확하게합니다 이것은 페이지에서 사용하는 모든 리소스와 함께.

답변

0

캐싱을 관리하는 가장 좋은 방법은 local storage에 붙이는 것입니다. 뉴스 피드의 JSON을 단일 변수로 간단하게 드롭 할 수 있어야합니다. /news.json 파일은 200 응답의 캐시 된 사본 만 업데이트하도록 요청하면 나머지 앱에서는 항상 로컬 저장소에 사본을 사용합니다.

+0

대단히 감사합니다. 이 접근법은 AJAX가 요청한 것들을 위해 작동 할 것입니다. 원래의 질문에서 리소스 이름을 선택하는 것이 확실히 암시했습니다. 하지만 JavaScript가 관련되지 않은 간단한 이미지 참조를 포함하여 페이지에서 사용할 수있는 모든 리소스에 대한 문제를 해결하기 위해 노력하고 있습니다. 나는 오프라인 저장 장치로 "내 자신의 것"을 쓰기보다는이 새로운 오프라인 캐시 기능을 사용할 수 있기를 바랍니다. "news.json"대신 "background.png"를 참조하여 질문의 의도를 명확하게 설명했습니다. 다시 한 번 감사드립니다! – jgarbers

+0

@ jgarbers 그러면 작동하지 않을 것입니다. 매니페스트에 파일을 나열하면 응용 프로그램 캐시에서 파일이 제공됩니다. 매니페스트 파일 자체를 업데이트 할 때까지 서버에서 업데이트되지 않습니다.작동하도록 설계된 방식 : 변경되지 않은 사항이 매니페스트에 포함됩니다. 변화하는 것들 (즉, 데이터)은 AJAX에 의해 요청되고 당신은 그들 자신의 캐싱을 처리한다. 이미지를 데이터 중심으로 사용하려면'canvas' 또는'svg'를 사용하십시오. – robertc

+0

디자인이 내가 합리적인 패턴이라고 생각하는 디자인을 지원하지 않는 이유는 여전히 궁금합니다. "오프라인 일 경우 갖고있는 것을 사용하고 그렇지 않은 경우에는 새 것을 확인하십시오. 당신의 대답을 받아 들일 것입니다. 내가 듣고 싶었던 것이 아닐 수도 있지만 그것이 옳다! – jgarbers

관련 문제