IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Utilisation de l'API Cache


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2020
    Messages : 19
    Par défaut Utilisation de l'API Cache
    Bonjour,


    Je travaille sur un code JS pour mettre en cache des réponses de requêtes GET de l'api PIXABAY. Mais, la méthode de cache que j'utilise n'a pas l'air de vouloir enregistrer les résultats. Pourtant d'après ce que j'ai pu lire ça devrait être bon je pense. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if ('caches' in window) {
      const newCache = await window.caches.open('cache-pixabay');
     
      const options = {
        method: "GET",
        headers: new Headers({
          'Accept': 'application/json',
        }),
      }
     
      let request = new Request(URL, options);
      datas = await newCache.match(request);
      alert(JSON.stringify(datas));
      if (isEmptyObj(datas)) {
        alert('iciii');
        await newCache.add(request);
        datas = await newCache.match(request);
        alert(JSON.stringify(datas));
      }
     
    } else {
      xhttp.open("GET", URL, false);
      xhttp.send();
      datas = JSON.parse(xhttp.responseText);
    }
    Alert affiche toujours un objet vide {}. Je ne trouve pas trop d'exemples sur le net. Si quelqu'un sait ce qui ne va pas dans mon code ?
    Merci.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    Je travaille sur un code JS pour mettre en cache des réponses de requêtes GET...
    il existe plusieurs moyens de faire cela comme par exemple avec local-session storage, l’utilisation du cache étant le plus souvent utilisé avec les services workers.

    Ceci étant j'ai du mal à comprendre ton code quand on voit, par exemple, un xhttp.open complétement inutile ici.

    Que cherches-tu à faire réellement, vérifier que les données sont en cache ?

    Pour les mettre en cache il te suffit juste de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    caches.open(cachename)
      .then((cache) => {
        cache.add(url)
          .then(() => {
            console.log("data en cache")
          })
      });
    à partir de ce moment là tes données étant en cache si tu veux les utiliser tu pourrais avoir une fonction de lecture comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    const readCache = (cachename, callback) => {
      caches.open(cachename)
        .then((cache) => {
          cache.match(url)
            .then((response) => {
              if (response) {
                // on suppose qu'il s'agit de JSON
                return response.json();
              }
            })
            .then((data) => {
              // ici on peut utiliser les données
              callback && callback(data);
            })
            .catch(error => console.warn("Error :", error));
        });
    }
    voilà pour un début

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2020
    Messages : 19
    Par défaut
    Bonjour,
    merci pour la réponse.
    En fait je vérifie si l'api cache est disponible si c'est le cas j'essaye de récupérer les données dans le cache sinon c'est inutile d'essayer d'utiliser le cache je fais donc ma requête http normalement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ('caches' in window) {

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Il serait bon que tu saches les navigateurs visés, Cache est inconnu pour IE.

    Si tu peux te contenter d'une solution XMLHttpRequest autant passer par localStorage ou sessionStorage mais en as-tu vraiment besoin !?!

    Pour en revenir à ton code, la méthode cache.match() retourne une Response et non des datas exploitables.

    Il te faudrait donc écrire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const monCache = await caches.open(CACHE_NAME);
    datas = await monCache.match(URL)
      .then((response => {
        return response.json()
      }));
    console.log("Data :", datas);
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const monCache = await caches.open(CACHE_NAME);
    response = await monCache.match(URL);
    datas = await response.json();  
    console.log("Data :", datas);
    dans la mesure où cela est encapsuler dans une fonction async, perso je trouve très laid l'utilisation de async/await .

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2020
    Messages : 19
    Par défaut
    Merci pour les conseils je vais voir si je vais rester sur une fonction async. la mise en cache est demandé par l'api pour limiter l'appel à l'API. En effet, je n'ai pas regardé ce que retourne la fonction match.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.Net]Utilisation de l'API OOo
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/01/2007, 13h13
  2. [VTemplate] Comment utiliser le système de cache ?
    Par xhark dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/10/2006, 23h37
  3. [SOAP] Utilisation de quelle API ?
    Par _beber85 dans le forum Services Web
    Réponses: 3
    Dernier message: 29/05/2006, 13h21
  4. [DOM] Utilisation de l'API DOM pour créer du HTML sous IE
    Par pedouille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/01/2006, 14h48
  5. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo