From df94e7904dc2cd736f360632a85f4f8d8a7af216 Mon Sep 17 00:00:00 2001 From: Eric NGUYEN Date: Mon, 17 Oct 2022 13:10:44 +0200 Subject: [PATCH] Add web worker documentation --- docs/#Project/Home.md | 2 ++ docs/#Project/Pages/WebWorkers.md | 38 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 docs/#Project/Pages/WebWorkers.md diff --git a/docs/#Project/Home.md b/docs/#Project/Home.md index adc0850..b97a2c8 100644 --- a/docs/#Project/Home.md +++ b/docs/#Project/Home.md @@ -13,5 +13,7 @@ Liens : - [Dépendences du projet](Pages/Dependencies.md) - [Structure de données des conteneurs](Pages/DataStructure.md) - [Système de comportement](Pages/Behaviors.md) +- [Implémentation du menu contextuel](Pages/ContextMenu.md) +- [Web workers](Pages/WebWorkers.md) - [Système de CI/CD](Pages/Behaviors.md) - [Mise en place du SmartComponent sur Modeler](Pages/SmartComponent.md) \ No newline at end of file diff --git a/docs/#Project/Pages/WebWorkers.md b/docs/#Project/Pages/WebWorkers.md new file mode 100644 index 0000000..6b42c0f --- /dev/null +++ b/docs/#Project/Pages/WebWorkers.md @@ -0,0 +1,38 @@ +# Web workers + +Cette page explique la raison d'utiliser un web worker. + + +# Qu'est-ce qu'un web worker ? + +Rapidement, c'est juste un fichier js qui est exécuté côté dans un Thread différent. + +Il attend un réponse, la traite et peut répondre ensuite. + + +# Pourquoi en utiliser ? + +Cela permet du véritable code asynchrone évitant le freeze du navigateur lorsqu'il fait des calculs compliqués ou lorsqu'il attend. + +Exemple: https://mdn.github.io/dom-examples/web-workers/fibonacci-worker/ + + +# Comment sont-ils utilisés ? + +## Sauvegarde + +Le premier web worker, situé dans [`public/workers/worker.js`](../../../public/workers/worker.js) s'occupe de faire une seule est unique tâche : `JSON.stringify` cependant on fonction de la taille de l'objet à stringifier en JSON cela peut prendre plusieurs secondes auquel cas l'utilisateur peut croire que son navigateur à bloqué. + +On le met donc dans un web worker pour éviter cela. + +Dans `Save.ts`, on crée le web worker avec `new Worker('workers/worker.js')` et on le termine quand il a fini sa tache avec `terminate()` + +## Envois de message + +Le deuxième web worker, situé dans [`public/workers/worker.js`](../../../public/workers/message_worker.js) s'occupe de faire des appels REST en stringifiant l'état de l'application. + +Pour la même raison que la sauvegarde, on le met pour éviter un freeze. + +Il est évidemment moins utile que la sauvegarde qui prends un objet beaucoup plus lourd. + +Contrairement à la sauvegarde, le web worker est crée dans `UI.tsx` avec `UseWorker()` et existe sur tout le long de la durée de vie de l'application. Il est initialisé dans l'utilisation du module `UseWorker.tsx`. \ No newline at end of file