2016-11-16 7 views
3

I know의 304 응답 상태 코드로 효율적으로 작업합니다. 내 문제는 목록이 정말 거대하고 (압축되지 않은> 4 MB) JSON으로 변환하는 작업이 상당히 오래 걸린다는 점이다. (내 데스크톱에서는 70 밀리 초, 중요한 곳에서는 Android에서 훨씬 더 오래 걸린다.)서버가 304 NOT MODIFIED를 반환 할 때 브라우저가 투명하게 처리하고 클라이언트 코드가이를 직접 사용할 수있는 방법이 없음을 나타내는

여기에 angularjs 캐시를 사용하고 싶지 않습니다. HTTP 요청을해야하기 때문입니다. 나는 부분적인 목록으로 일하고 싶지 않다.

E-Tag 헤더를 사용하고 defaultHttpResponseTransform을 해킹하는 것이 도움이 될 것 같지만이 오버 헤드를 피하는 표준 방법이 있는지 궁금합니다.

+0

내 대답에 언급 된 요격을 만들려고 했습니까? – tomepejo

답변

1

코드의 헤더에있는 E-tag을 단순히 비교하여 브라우저 캐시와 $cache을 결합 할 수 있습니다. 브라우저가 항상 200 개의 상태 코드를 시뮬레이트하므로 304 상태를 포착 할 수 없습니다. 이런 종류의 문제를 다루는 라이브러리가 있습니다 https://www.npmjs.com/package/angular-http-etag. 하지만 json을 파싱하는 문제는 localStorage가 json을 문자열로 serialize하기 때문에 피할 수 없습니다. 따라서 ether 메서드를 구문 분석해야합니다. 내 제안은 작은 덩어리로 json을 분할하고 필요에 따라 요청하는 것입니다

+0

좋은 소식! 그리고 같은 데이터를 자주 확인하고 비 영구적 인 캐시 (그냥 일반 js 객체)를 사용할 계획이므로 직렬화를 피할 수 있습니다. 실제로'localStorage'는 너무 제한적입니다 (5 MB 정도). 분할은 현재 옵션이 아닙니다. – maaartinus

+0

서비스 작업자 https://mobiforge.com/design-development/taking-web-offline-service-workers를 사용해 볼 수 있습니다. MB 단위의 제한은 50입니다. 또한 파일을 분할 할 수없는 경우 압축을 시도하십시오. Json 파일은 매우 압축 적입니다. tar.gz로 압축하면 파일 크기를 절반으로 나눌 수 있습니다. https://www.npmjs.com/package/tar.gz. 또한 파일에서 반복 가능한 데이터를 찾고 해당 문자열의 복사본을 하나만 유지하고 해당 문자열의 참조를 사용하여 파일에서 바꿉니다 – Kliment