Maison  >  Article  >  interface Web  >  Explication détaillée des cas d'utilisation du cache personnalisé AngularJS

Explication détaillée des cas d'utilisation du cache personnalisé AngularJS

php中世界最好的语言
php中世界最好的语言original
2018-05-10 10:36:391540parcourir

Cette fois, je vous apporte une explication détaillée du cas d'utilisation du cache personnalisé angularjs Quelles sont les précautions lors de l'utilisation du cache personnalisé angulairejs. jetez un oeil.

1. Qu'est-ce qu'un cache

Un cache est un composant qui peut stocker des données de manière transparente afin qu'elles puissent être servies plus rapidement à l'avenir. demander.

Plus le cache peut répondre à de requêtes, plus les performances globales du système s'améliorent.

2. Mise en cache dans Angular

2.1 Introduction à $cacheFactory

$cacheFactory est un Un service qui génère des objets de cache pour tous les services Angular. En interne, $cacheFactory crée un objet cache par défaut, même si nous n'en créons pas explicitement un.

Pour créer un objet cache, vous pouvez utiliser $cacheFactory pour créer un cache par un ID :

var cache = $cacheFactory('myCache');
Cette méthode $cacheFactory peut acceptez deux paramètres :

cacheId (String) : Ce cacheId est le nom de l'ID lors de la création du cache. Il peut être référencé en utilisant le nom du cache via la méthode get().

capacité : cette capacité décrit le nombre maximum de paires clé-valeur du cache à stocker et à sauvegarder à l'aide du cache à un moment donné.

2.2 Objet cache

L'objet cache lui-même possède les méthodes suivantes qui peuvent être utilisées pour interagir avec le cache.

info() : La méthode info() renvoie l'ID, la taille et les options de l'objet cache.

put() : La méthode put() nous permet de mettre n'importe quelle clé (chaîne) sous la forme d'un objet JavaScript dans le cache. La méthode cache.put("hello","world");

put() renverra la valeur que nous avons mise dans le cache.

get() : La méthode get() nous permet d'accéder à la valeur du cache correspondant à une clé. Si la clé est trouvée, elle renvoie sa valeur ; sinon, elle renvoie undefined . cache.get("hello");

remove() : La fonction remove() est utilisée pour supprimer une paire clé-valeur du cache si elle est trouvée. S'il n'est pas trouvé, il renvoie undefined . cache.remove("hello");

removeAll() : La fonction removeAll() est utilisée pour réinitialiser le cache et supprimer toutes les valeurs mises en cache.

destory() : La méthode destory() est utilisée pour supprimer toutes les références au cache spécifié du registre de cache $cacheFactory.

3. Cache dans $http

Le service $http d'Angular crée un cache avec l'ID $http. Faire en sorte que les requêtes $http utilisent l'objet cache par défaut est simple : la méthode $http() nous permet de lui passer un paramètre de cache.

3.1 Cache $http par défaut

Le cache $http par défaut est particulièrement utile lorsque les données ne changent pas fréquemment. Vous pouvez le définir comme ceci :

$http({
  method: 'GET',
  url: '/api/users.json',
  cache: true  //设置为true只是用来使用$http默认的缓存机制
});

Maintenant, chaque requête via $http vers l'URL /api/user.json sera stockée dans le cache $http par défaut. La clé de requête dans ce cache $http est le chemin complet de l'URL.

Si nécessaire, vous pouvez également utiliser ce cache $http par défaut (par exemple, si nous lançons une autre requête non mise en cache pour nous rappeler des modifications incrémentielles, nous pouvons l'effacer dans la requête $http par défaut de cette requête).

Afin de référencer la requête par défaut de $http, il suffit d'utiliser l'ID pour récupérer le cache via $cacheFactory() :

var cache = $cacheFactory('$http');

Pour le cache sous contrôle, on peut le faire en cas de besoin Toutes les opérations normales, telles que la récupération d'une réponse mise en cache, la suppression de l'entrée du cache ou la suppression de toutes les références mises en cache.

// 获取上一次请求的缓存
var usersCache = cache.get('http://example.com/api.users.json');
// 删除上一次请求的缓存入口
cache.remove('http://example.com/api.users.json');
// 重新开始并移除全部缓存
cache.removeAll();
    var cache = $cacheFactory.get('$http');
    if(cache.get('cacheData')){
      console.log(cache.get('cacheData'));
    }else{
      helloService.play().then(
        function (data) {
          cache.put("cacheData", data);  //往缓存中放入数据
          console.log(data);
        }
      );
    }

3.2 Mise en cache personnalisée

Parfois, vous pouvez avoir plus de contrôle sur le cache et créer des règles pour les performances du cache, ce qui nécessite la création d'un nouveau cache pour utilisez les requêtes $http.

Il est facile de faire des requêtes $http via un cache personnalisé. Au lieu de transmettre un paramètre booléen true à la requête, vous pouvez transmettre l'instance de cache.

var myCache = $cacheFactory('myCache');
$http({
  method: 'GET',
  utl: '/api/users.json',
  cache: myCache
});

一个小demo:定义一个缓存服务,依赖注入到你要用的控制器中,直接使用

define([
  'angularModule'
],function(app){
  app.factory('myCache', ['$cacheFactory', function($cacheFactory){
    return $cacheFactory('myCache'); //自定义一个缓存服务
  }])
});
    //自定义缓存,有缓存就从缓存里取,否则就发送请求
    if(myCache.get('cacheData')){
      console.log(myCache.get('cacheData'));
    }else{
      helloService.play(myCache).then(
        function (data) {
          myCache.put("cacheData", data);
          console.log(data);
        }
      );
    }
      cache:只是为了可以使用默认$http的缓存机制
      play : function (myCache) {
        return httpRequestService.request({
          method : 'get',
          url : 'http://localhost:8080/hello/play',
          cache : myCache
        })
      }

现在, $http 将会使用自定义的缓存而非默认缓存。

四、为 $http 设置默认缓存

每次我们想要发起一个 $http 请求时都要给它传递一个缓存实例并不方便,特别是对每个请求使用同一缓存的时候。

其实可以在模块的 .config() 方法中通过 $httpProvider 设置 $http 默认使用的缓存对象。

angular.module('myApp', []).config(function($httpProvider) {
  $httpProvider.defaults.cache = $cacheFactory('myCache', {capacity: 20});
});

这个 $http 服务不再使用它为我们创建的默认缓存;它会使用我们自定义的缓存,实际上这就是一个近期缓存最久未使用算法① (Least Recently Used,LRU)。

LRU缓存根据缓存容量只保留最新的缓存数目。也就是说,我们的缓存容量为20,因此会缓存前20个请求,但是进入第21个请求时,最近最少使用的请求条目就会从缓存中被删除。这个缓存自身会负责具体哪些要维护,哪些要移除。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

FIFO/LRU实现缓存算法

nodejs连接mysql数据库步骤详解

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn