2015-10-01 2 views
-1

de travail sur cette application: https://billiving-qa.azurewebsites.net/spa1/#/invoicesAngularJS http get cache ne fonctionne pas

Certains appels http devraient être mises en cache, mais pour une raison quelconque cela ne fonctionne pas:

function getStatuses() { 
      return $http.get('/v1/definitions/status', { cache: true }) 
      .then(function (response) { 
       return response.data; 
      }) 
     } 

Si vous regardez dans le réseau vous 'd' voir 'v1/definitions/status' n'est pas mis en cache bien que flag soit défini.

Merci

+0

fait référence ici à la mise en cache de niveau angulaire. En d'autres termes, Angular évite une autre requête HTTP à l'URL déjà mise en cache (l'URL est utilisée comme clé). Vous ne verriez pas qu'il est "mis en cache" dans l'onglet réseau –

+0

Je vois qu'un appel est toujours en cours à DB dans SQL Profiler – Josh

Répondre

2

En fait, il est en cache de ce que je peux voir.

Le cache interne d'Angular ne stocke que des éléments en mémoire dans l'application elle-même, ce n'est pas la même chose qu'un cache de navigateur. Le cache d'Angular entre en jeu lorsque l'application tente de demander plusieurs fois la même URL, comme lors d'un retour en arrière et d'une quatrième entre les routes. Il saisit alors la réponse du cache au lieu de faire une autre requête http.

Ce qu'il ne fait pas, c'est mettre en cache des choses dans le navigateur. Si vous rechargez complètement la page, vous rechargez également l'application et tout ce qu'elle contient, comme le cache interne d'Angular. Dans ce cas, une nouvelle demande est faite.

Si vous souhaitez disposer d'un cache de niveau de navigateur pour qu'il soit mis en cache même lorsque la page est rechargée, vous devez gérer cela avec des en-têtes de cache du serveur, Angular n'a aucun contrôle sur cela.

À titre d'exemple, pour mettre en cache la demande pendant 1 heure

mise en cache
cache-control: public, max-age=3600 
+0

Je ne pense pas qu'il est en cache .. parce que je peux voir dans SQL Profiler qu'un appel est toujours en cours à notre base de données. Aussi ce que vous suggérez est bon pour une page entière .. mais j'ai seulement besoin de mettre en cache une action particulière. – Josh

+0

Oui, un appel est en cours, la première fois que vous chargez la page ou lorsque vous rechargez la page. Un appel n'est pas fait si vous retournez et quatrième, ce qui est la seule chose que fait la mise en cache angulaire. –

+0

Plus précisément. Je commence par naviguer vers votre lien ci-dessus et une demande XHR contre/statut est faite, ce qui est attendu puisque c'est le premier chargement de l'application. Ensuite, je navigue vers le tableau de bord et de nouveau vers Documents. Cette fois, aucune demande de statut n'est faite, ce que nous attendons avec la mise en cache. –