sw&rpc

Une bibliothèque pour faire du RPC entre une page web et un Service worker[^1]. Développée pendant le développement de CIGALE : nous faisions tourner l’inférence d’un réseau neuronal sur l’appareil de l’utilisateurice, mais sur le même thread que le code principal de l’UI, ce qui rendait l’application lente pendant que l’inférence tournait (les spinners de chargement tournaient en saccades, l’UI réagissait avec des retards, etc).

La solution consistait à utiliser des [Service workers] (https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker), une technologie qui permet d’exécuter du code en dehors du thread de l’UI.

Mais l’API est un peu lourde : il faut envoyer des événements de type “message”, et les écouter sur le code du service worker.

J’ai donc créé cette bibliothèque qui, d’une manière très similaire à tRPC, permet de définir des procédures (le type de leurs arguments, ce qu’elles renvoient, etc), de les implémenter dans le code du service worker, et de les exécuter sur le client comme s’il s’agissait d’une fonction normale.

De plus, comme il s’agit de fonctions à longue durée d’exécution, il existe un support de première classe pour réagir aux mises à jour de la progression pendant que la fonction s’exécute, et mettre à jour l’UI : par exemple, pendant le téléchargement d’un gros fichier, la progression du téléchargement peut être rapportée au site d’appel[^2], où elle peut être utilisée pour mettre à jour une barre de progression.

Code source
github.com
Documentation
gwennlbh.github.io

*[UI] : Interface Utilisateur (User Interface) *[RPC] : Appel de procédure à distance [^1] : Technologie Web qui permet d’exécuter du code en arrière-plan [^2] : Emplacement dans le code où une fonction est appelée

Traduit avec DeepL.com (version gratuite)

Time spent

1 heure 19 minutes

made with