La $chacheFactory è utile per memorizzare i dati nel primo livello di cache, quello presente sul client dell’utente.

Grazie all’uso del servizio $http, è possibile gestire questo livello di caching in maniera molto semplice.

Ad es., poiché la singola lezione ha politiche di aggiornamento molto poco frequenti, è un buon candidato per essere inserita in cache. Il codice per poterlo fare è più che intuitivo:

$http.get(DisciturSettings.apiUrl + 'lesson/' + inputParams.id, {cache: true})

in questa modalità si utilizza il cacheFactory di default, secondo quanto riportato dalla documentazione ufficiale.

Con questa impostazione, dopo la prima volta, tutte le chiamate successive all’api di ricerca con i medesimi parametri di ricerca non produrrà un’invocazione lato server, ma verrà risolta dal cache manager di Angular, che restituirà i dati relativi alla prima invocazione. Questo consente di ottimizzare notevolmente le performance dell’applicazione

Ogni volta che l’utente esegue operazioni sui dati che richiedono che la cache sia rinfrescata è possibile svuotare la cache della specifica chiave, in modo che il servizio $http esegua nuovamente una richiesta al server alla successiva chiamata del servizio

// Retrieve Async data for lesson id in input        
$http({ method: 'PUT', url: DisciturSettings.apiUrl + 'lesson/' + _lesson.LessonId, data: _lesson })
  .success(
    // Success Callback: Data Transfer Object Creation
    function (result) {
    // if success, clear cache 
    $cacheFactory.get('$http').remove(DisciturSettings.apiUrl + 'lesson/' + _lesson.LessonId)
    deferred.resolve(_dataTransfer(result))
  })
  .error(
    // Error Callback
    function (data) {
      deferred.reject("Error updating lesson id:" + _lesson.lessonId + " -> " + data);
  });

Un buon articolo che dettaglia le possibilità di caching e che presenta un modulo per definire politiche di refresh della cache angular è il seguente: https://coderwall.com/p/40axlq

Comments