2 votes

Un Service Worker peut-il pré-cacher une base de données MySQL ?

J'ai un PWA qui fait appel à des travailleurs sociaux. Elle peut pré-cacher les URL et les ressources, ce que je trouve très utile, surtout depuis que je l'ai transformée en PWA et publiée sur le Play Store.

La base de données MySQL à laquelle il se connecte est assez légère, environ 6 Mo.

Est-il possible de mettre en pré-cache la base de données complète avec mon Service Worker ou est-il seulement possible de mettre en pré-cache les URLs/actifs statiques ?

1voto

abadalyan Points 1040

Les travailleurs de service peuvent mettre en cache/précache la réponse d'une requête donnée. Disons que vous avez Library Base de données MySQL sur le serveur, contenant des tables telles que Books y Authors . Pour le mettre en cache à l'aide d'un travailleur de service, vous pouvez créer un service qui renvoie les livres et les auteurs au format JSON, par ex. GET https://you-api.com/library . Ensuite, en fonction de votre stratégie de mise en cache, vous pouvez soit :

  • Ajouter https://you-api.com/library URL vers la liste des ressources mises en précachette utilisées par le travailleur de service. install étape, ou
  • Manipuler le travailleur du service fetch correspondant à l'événement https://you-api.com/library demande.

Dans les deux cas, vous pouvez stocker le résultat dans Cache o IndexedDB . Je préférerais IndexedDB Cependant, nous devons être en mesure de travailler facilement avec ces données par la suite. Avec IndexedDB, vous pouvez créer plusieurs magasins si vous décidez de stocker séparément les enregistrements de vos tables MySQL.

OK, nous avons créé et alimenté notre base de données locale. Et maintenant ?

Vous pouvez soit :

  • Requête locale Library directement à partir de votre page, ou
  • Continuer à utiliser les travailleurs sociaux

Concentrons-nous sur la deuxième option. Votre application utilise très probablement certains services pour récupérer des données dans la base de données distante. Disons que https://you-api.com/library/book/<id> est utilisé pour récupérer un livre par son identifiant. Pourquoi ne pas profiter du fait que nous avons des livres en cache localement ? L'approche la plus directe serait la suivante :

  • Intercepter la requête de récupération correspondant à l'URL ci-dessus en utilisant le travailleur de service ci-dessus.
  • Lire le nom de la table et l'identifiant du livre à partir de l'URL de la demande.
  • Requête locale Library pour ce livre spécifique et de le renvoyer dans le même format que le service à distance

Quelques considérations supplémentaires et cas particuliers :

  • Gérer le cas où la base de données locale n'est pas présente
  • Décider quand et comment la base de données est mise à jour
  • Gérer les changements de schéma
  • En option, utilisez la stratégie du réseau en premier. Tenter d'abord de récupérer les enregistrements de la base de données à partir du service distant et revenir à la version en cache lorsque le réseau n'est pas disponible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X