当AngularJS缓存HTTP请求时,它会缓存解析的JSON对象或字符串响应本身

时间:2017-02-09 11:18:43

标签: javascript angularjs json caching

我使用内置的AngularJS缓存I.E。

缓存我的HTTP请求
global
    quiet

defaults
    log global
    mode http
    option forwardfor
    timeout connect 60s
    timeout client 60s
    timeout server 60s
    default-server init-addr none

resolvers docker_resolver
    nameserver dns 127.0.0.11:53

frontend https-proxy
    bind 0.0.0.0:80
    bind 0.0.0.0:443 ssl crt /usr/local/etc/haproxy/dev_server.pem
    redirect scheme https if !{ ssl_fc }

    acl is_api_server hdr(host) -i mywebsite

    use_backend api_server if is_api_server

backend api_server
    server haproxyapi api-server-dev:80 check inter 10s resolvers docker_resolver resolve-prefer ipv4

我的API返回的所有数据都是gzip压缩的JSON。一些请求是非常大的未压缩(想想兆字节),并且从字符串转换为JSON花费了大量的浏览器时间。然后我想知道AngularJS如何缓存HTTP响应。如果它只缓存字符串响应,那么每次我访问缓存时,它都必须再次转换为JSON,这可能很昂贵。

任何人都可以了解AngularJS缓存的内容,以便我可以决定如何最好地继续进行,即某些大调用将数据缓存为服务中的对象而不是使用HTTP缓存。

1 个答案:

答案 0 :(得分: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;
})

' $ http' cache将每个项目存储为包含4个项目的数组:

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

JSON数据在被任何响应拦截器解析和转换之前存储为原始字符串。

DEMO on JSFiddle