D8S EURL blog

← Back to Index

Framework JS pour l'embarqué

> Lorsque l'on souhaite embarquer des pages web dans un système embarqué, il est particulièrement utile de faire travailler le navigateur client pour laisser le processeur tranquille. Les frameworks Javascript récents sont assez lourds par contre, voyons ce que ça donne.

Principe et choix de départ

Le serveur Web embarqué dans le processeur, type microcontrôleur ici, va servir les pages : du HMTL, des images et des ressources de type fichier au sens général, dont deux qui vont nous intéresser : le CSS et le Javascript.

Une fois que le client (le navigateur) a téléchargé le le Javascript, le processus usuel est de ne faire véhiculer que des données brutes (du JSON par exemple) entre le serveur Web et la page. Les derniers frameworks utilisent à font la réactivité, c'est à dire la possibilité de rafraîchir automatiquement les données à l'affichage dès qu'elles sont modifiées. Et cela, sans code particulier par exemple.

Les frameworks classiques comme ReactJs, VueJs, Angular le font très bien, en plus d'apporter une structure au code : des composants bien séparés, un cycle de vie bien déterminé, un moteur de template ... bref, lorsque l'on a goûté au luxe il est difficile de revenir en arrière vers du Javascript pur écrit à la main.

Dans le cas de développement embarqué, il est courant d'utiliser en plus une liaison bi-directionnelle de type WebSocket entre le client et le serveur : dès qu'une mesure est disponible, le microcontrôleur la transfert vers le client via le tuyau websocket.

Notre cahier des charges est le suivant :

Pour ce dernier point, nous n'allons pas nous intéresser à la version compressée des librairies car c'est le serveur Web qui va s'occuper de ça et dans l'embarqué cette fonction n'est pas légion, voire trop gourmande en ressources. Cela ne va pas nous empêcher d'utiliser l'astuce de la compression comme nous le verrons plus loin, sans pénaliser le serveur.

Vite

Nous allons donc utiliser Vite pour faciliter la création de bundle CSS/JS. Voyons ce que nous propose l'outil embarqué de création de squelette de projet


npm create vite@latest vuejs --template=vanilla

image

Testons avec Vue.js par exemple, on choisit ensuite Typescript comme langage. Puis compile :


cd vuejs
npm install
npm run build

Voici ce que donnent les statistiques :


vite v4.4.11 building for production...
✓ 18 modules transformed.
dist/index.html                  0.45 kB │ gzip:  0.29 kB
dist/assets/vue-5532db34.svg     0.50 kB │ gzip:  0.31 kB
dist/assets/index-c322ae43.css   1.30 kB │ gzip:  0.67 kB
dist/assets/index-127f2da4.js   51.61 kB │ gzip: 20.93 kB
✓ built in 649ms

Ouch, on s'y attendait, 51Ko de code qui ne fait pas grand chose, ça démarre mal mais on s'y attendait.

On opère de même pour les autres frameworks :

FramworkTaille du Js

----------------------------

Vanilla1.45 kB
Solid8.60 kB
Preact13.77 kB
Lit20.17 kB
Qwik46,65 kB
Vue51.61 kB
React143.41 kB

Ok, Svelte est fidèle à son image de framework optimisé. On déclare donc le choix fait pour la partie Javascript.

Framework CSS

Notre besoin est le suivant :