2015-04-18 8 views
5

Supponiamo che io sono un servizio che recupera un elenco di tag e devo conservare i tag nella cache:qual è l'approccio comune per il caching dei dati in angular.js

function TagsRetriever() { 

    var cache = $cacheFactory("tags"); 
    function getTags() { 
     var cached = cache.get("tags"); 
     if (cached) { 
      return cached; 
     } else { 
      return $http.get("url/getTags").then(function (tags) { 
       cache.put("tags", tags); 
      }); 
     } 
    } 
} 

Qual è l'approccio comune per invalidare la cache? Dovrei confrontarlo con la data corrente? L'angolare fornisce alcun meccanismo di invalidazione della cache?

E qual è il vantaggio dell'utilizzo di cacheFactory anziché di una variabile contenente cache?

+2

Non lo inviamo affatto. Dopo l'inizializzazione, manteniamo la cache sincronizzata tramite una connessione web-socket. –

+0

@OliverSalzburg, interessante, grazie, qualche link da leggere su questo approccio? –

+1

https://github.com/oliversalzburg/absync –

risposta

1

Check brillante angular-cache che ti impedirà di reinventare la ruota con $ cacheFactory (non fornisce altro che una semplice memorizzazione, a volte è sufficiente).

Ecco come gestisce invalidazione della cache (un esempio da manuale):

CacheFactory('profileCache', { 
    maxAge: 60 * 60 * 1000 // 1 hour, 
    deleteOnExpire: 'aggressive', 
    onExpire: function (key, value) { 
    $http.get(key).success(function (data) { 
     profileCache.put(key, data); 
    }); 
    } 
}); 

E qual è il vantaggio di utilizzare cacheFactory al posto di un tenuta della cache variabile?

Oltre a stabilire un servizio verificabile che implementa LRU e consente di risparmiare alcune righe di codice? Niente.

2

cacheFactory ti fornisce fondamentalmente un posto dove archiviare oggetti in memoria come servizio. Fornisce un'interfaccia per interagire con la cache ed è disponibile ovunque si inietti il ​​servizio.

Non sembra che abbia nulla di specifico per l'invalidazione. Basta inserire un tasto data ogni volta che si inserisce() e verificare contro di esso.

Anche l'utilizzo di Oliver è eccellente. Trasmetti i dati alla cache attraverso i socket e poi prendi semplicemente dalla cache. Se non lo stai facendo in questo modo, potresti creare un servizio che gestisce la convalida della cache. Passare i dati al servizio Se si tratta di nuovi dati, aggiunge una data key. Se sono dati esistenti, confronta le date.

Ha i seguenti metodi:

  • caricare, scaricare, estrarre, removeAll, informazioni, distruggere

non c'è davvero molto da esso: Documentation

Problemi correlati