2017-02-09 8 views
2

Я кэширую свои HTTP-запросы, используя встроенный таймер AngularJS I.E.Когда AngularJS кэширует HTTP-запросы, он кэширует обработанный JSON-объект или сам ответ на строку

.$http({ 
    url: "/api/data", 
    method: "GET", 
    cache: true 
}) 

Все данные, возвращенные с моего API, являются gzipped JSON. Некоторые из запросов довольно большие без сжатия (думаю, мегабайты), и заметное количество времени в браузере тратится на преобразование из строки в JSON. Затем я задавался вопросом, как AngularJS кэширует HTTP-ответ. Если он только кэширует ответ строки, то каждый раз, когда я получаю доступ к кешу, ему придется снова конвертировать в JSON, что может быть дорогостоящим.

Может ли кто-нибудь пролить свет на то, что именно тайники AngularJS, поэтому я могу решить, как лучше всего действовать, например, для некоторых крупных вызовов кешировать данные как объект в службе, а не использовать кеш HTTP.

+0

должен кэшировать объект ответа, вы всегда можете запустить JS в отладке, чтобы увидеть detaisl –

+0

Он хранит в виде строк. Угловой выступает в JSON и от JSON на нем. Это создает всплески памяти, поэтому я не могу его использовать. – bhantol

+0

@bhantol Спасибо, получили ссылки или ссылки, на которые я могу смотреть? – Chris

ответ

1

Вы можете посмотреть на кэш самостоятельно:

var p = $http({ 
    url: url, 
    method: "GET", 
    cache: true 
}) 

p.then(function(response) { 
    vm.data = response.data; 
    vm.info = $cacheFactory.info(); 
    console.log($cacheFactory.get('$http')); 
    console.log($cacheFactory.get('$http').get(url)); 
    vm.value = $cacheFactory.get('$http').get(url)[1]; 
    vm.typeOf = typeof vm.value; 
}) 

The '$ HTTP' кэш хранит и каждый элемент как массив с 4 пунктов:

  • [0] response.status
  • [1] response.data
  • [2] response.headers()
  • [3] response.statusText

Данные JSON хранятся в виде необработанной строки перед ее анализом и преобразованием с помощью любых ответных перехватчиков.

DEMO on JSFiddle