Deux questions pour deux scripts javascript.

WRInaute accro
Bonjour

Pour ma PWA ;)

J'ai deux questions par rapport au choix de scripts javascript.

1er script : cache sinon fetch -> cache

2ème script : cache sinon fetch.

J'envisage soit les deux scripts suivants ( pour 1 et 2 ), soit deux autres scripts plus simples.

Voici les scripts et les questions :


JavaScript:
// StaleWhileRevalidate.js
self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.open('mysite-dynamic').then(function(cache) {
      return cache.match(event.request).then(function(response) {
        var fetchPromise = fetch(event.request).then(function(networkResponse) {
          cache.put(event.request, networkResponse.clone());
          return networkResponse;
        })
        return response || fetchPromise;
      })
    })
  );
});

Le script StaleWhileRevalidate.js fait-il le fetch même si le cache répond ?


JavaScript:
// CacheNetworkRace.js
// Promise.race is no good to us because it rejects if
// a promise rejects before fulfilling. Let's make a proper
// race function:
function promiseAny(promises) {
  return new Promise((resolve, reject) => {
    // make sure promises are all promises
    promises = promises.map(p => Promise.resolve(p));
    // resolve this promise as soon as one resolves
    promises.forEach(p => p.then(resolve));
    // reject if all promises reject
    promises.reduce((a, b) => a.catch(() => b))
      .catch(() => reject(Error("All failed")));
  });
};
self.addEventListener('fetch', function(event) {
  event.respondWith(
    promiseAny([
      caches.match(event.request),
      fetch(event.request)
    ])
  );
});


Le script CacheNetworkRace.js fait-il le fetch même si le cache a répondu ?

Merci beaucoup.
 
WRInaute accro
Les 2 questions peuvent être répondues via F12 (onglet Application) qui permet d'activer / désactiver / effacer le cache.
 
WRInaute accro
Bonjour spout

Merci beaucoup pour ton avis.

Evidemment ce sont des promises.

promiseAny ( 2ème script ), se résout si l'une au moins des promises est résolue.

Pour le 1er script, la deuxième promise ne se déclenche-t-elle que si la première promise
échoue ?

Ce n'est pas avec des cas particuliers qu'il est possible de résoudre un cas général.

Merci beaucoup.
 
Dernière édition:
WRInaute accro
Excusez-moi.

Pour le deuxième script, la promiseAny n'a pas besoin d'évaluer son deuxième argument ( fetch ) si le cache répond.

Pour le premier script, la promise du cache.match() n'exécute le code après le then que si le cache répond ?

Dans ces conditions, à quoi bon ( après le then ) mettre le fetch en cache ?

Le premier script est-il valide ?

Merci beaucoup de vos réponses.
 
WRInaute accro
Je vous demande pardon.

Le deuxième script ( promiseAny ), déclenche le plus rapide des deux ( fetch ou cache ).

Mais quid du premier script : Le fetch se déclenche-t-il si le cache échoue ?

Le fetch est dans le then().

Il y a la promise du fetch, et le then() rend != false si le fetch est valide, même si le cache rend false.

Donc correct ?

Je vous prie de me pardonner de mes faibles connaissances en javascript .

Bien à vous.

Amicalement.
 
Discussions similaires
Haut