Има ли начин да използвате кеша на браузъра за AngularJS JSON заявки ($http/$resource)?

Разработваме приложение с AngularJS и RESTful услуги. Данните, върнати от услугите, се променят рядко и много бих искал да кеширам отговорите за определен период от време. Задавам Cache-Control: no-transform, max-age=604800 в отговора.

Има ли начин заявките на AngularJS JSON ($http/$resource) да зачитат кеша на браузъра, вместо да използват напълно паралелно вградения кеш на AngularJS (http://www.metaltoad.com/blog/angularjs-vs-browser-http-cache) или angular-cache библиотека (http://angular-data.pseudobry.com/documentation/api/angular-cache) ? От това, което виждам, наблюдавайки мрежата, по подразбиране $http заявките игнорират заглавките на Cache-Control.


person DKroot    schedule 24.07.2014    source източник


Отговори (2)


Браузърът ще зачита времето за кеширане, зададено от отговора за този конкретен актив. Всеки следващ GET трябва да търси в кеша, докато изтече времето за изчакване.

Възможно е да имате devtools, които игнорират това.

person Dane Macaulay    schedule 24.07.2014

Там, където се спъвах, бяха презарежданията на страниците и начина, по който се държат по различен начин.

Нека разделим случаите на употреба на две:

1. Посещение на страница: просто преминаване към вече посетена страница.

Тук виждам това, което виждате и вие: по-голямата част от съдържанието се извлича от кеша. Chrome го показва по-добре от Firefox/Firebug. Firebug просто не показва попадения в кеша в мрежовия панел.

2. Редовно презареждане на страницата.

Почти всички браузъри имат два преки пътища за опресняване на страница: редовно презареждане (Ctrl+R в Chrome/Windows) и презареждане, игнориращо кеша (Shift+F5 в Chrome/Windows). Говоря за редовно презареждане, тъй като ако кешът се игнорира, няма какво да се обсъжда.

Това, което изглежда се случва, е, че браузърът издава заявки If-Modified-Since за всички ресурси на страницата. След това сървърът отговаря с 304 Not Modified за статични ресурси и браузърът ги получава от кеша.

Проблемът е, че ние не обработвахме If-Modified-Since в нашите услуги. Ние просто задавахме Cache-Control с възрастта на изтичане.

Актуализацията на кода на сървъра, която започна да обработва If-Modified-Since, реши проблема.

Между другото, ето една основна статия за кеширането на браузъра, която намерих за доста полезна: https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers

person DKroot    schedule 31.07.2014