Installation directe
L’utilisateur ajoute la PWA à son écran d’accueil directement depuis le navigateur — aucun magasin d’applications requis.
Imaginez qu’un commerce local — disons une microbrasserie de Sherbrooke — souhaite offrir à ses clients une application pour consulter le menu, passer des commandes et recevoir des notifications sur les nouveaux produits. Deux options s’offrent à elle :
Les applications web progressives (PWA) sont des applications web qui offrent une expérience utilisateur proche de celle des applications natives, en utilisant les technologies web standards (HTML, CSS, JavaScript).
Installation directe
L’utilisateur ajoute la PWA à son écran d’accueil directement depuis le navigateur — aucun magasin d’applications requis.
Fonctionnement hors ligne
Grâce aux Service Workers, la PWA peut fonctionner sans connexion Internet.
Notifications push
Les développeurs peuvent maintenir l’engagement des utilisateurs même lorsque l’application est fermée.
Multiplateforme
Une seule version fonctionne sur smartphone, tablette et ordinateur — réduction des coûts de développement.
Un avantage supplémentaire : les mises à jour automatiques. Contrairement aux applications natives, où l’utilisateur doit manuellement déclencher la mise à jour via un magasin, les PWAs se mettent à jour en arrière-plan. L’utilisateur bénéficie toujours de la version la plus récente.
Malgré leurs avantages, les PWAs présentent certaines limitations à connaître :
L’architecture d’une PWA repose sur trois piliers technologiques qui travaillent ensemble pour offrir une expérience fiable et performante.
Les Service Workers sont des scripts JavaScript exécutés en arrière-plan, indépendamment de la page web. Ils agissent comme un intermédiaire entre l’application, le navigateur et le réseau.
Leurs responsabilités principales :
// Exemple simplifié d'un Service Workerself.addEventListener('install', (event) => { event.waitUntil( caches.open('v1').then((cache) => { return cache.addAll(['/index.html', '/style.css', '/app.js']); }) );});
self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request).then((response) => { return response || fetch(event.request); }) );});Le fichier manifest.json contient les métadonnées de l’application. Il indique au navigateur comment afficher la PWA lorsqu’elle est installée.
{ "name": "Microbrasserie du Canton", "short_name": "Canton", "description": "Menu et commandes en ligne", "start_url": "/", "display": "standalone", "background_color": "#1a1a2e", "theme_color": "#e94560", "icons": [ { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" } ]}Les propriétés clés :
name / short_name : nom affiché sur l’écran d’accueilstart_url : page de démarrage au lancementdisplay : mode d’affichage (standalone = sans barre d’adresse)icons : icônes utilisées par le système d’exploitationLa Cache API permet de stocker localement les ressources de l’application (HTML, CSS, images, scripts). Utilisée conjointement avec les Service Workers, elle garantit une expérience fluide même sans connexion.
Deux API complémentaires pour la persistance des données :
Ensemble, ces mécanismes assurent que l’application reste fonctionnelle et que les données de l’utilisateur sont préservées, même hors ligne.
Le schéma suivant illustre comment les différentes couches interagissent :
Avant de plonger dans React, clarifions une distinction fondamentale.
Un cadriciel fournit une structure complète et impose une organisation du code. C’est le framework qui contrôle le flux d’exécution — le développeur s’insère dans l’architecture préétablie.
Analogie : Un cadriciel, c’est comme un template. La structure globale est déjà définie, vous remplissez les champs et personnalisez les composantes.
Exemples : Angular, Next.js, Django
Une librairie est un ensemble de fonctions réutilisables que le développeur appelle selon ses besoins. Le développeur garde le contrôle total sur l’architecture et le flux d’exécution.
Analogie : Une librairie, c’est comme une boîte à outils. Vous choisissez quel outil utiliser, quand et comment.
Exemples : React, Lodash, D3.js
React est une librairie JavaScript open-source, développée par Meta (Facebook), pour construire des interfaces utilisateur modulaires, réactives et performantes.
React est la technologie web la plus utilisée par les développeurs professionnels pour construire des applications web modernes (Survey StackOverflow 2024). Sa popularité repose sur plusieurs forces : une approche par composants réutilisables, un écosystème mature et une communauté massive.
L’écosystème de React complète ses capacités de base pour couvrir tous les aspects du développement d’applications.
Gestion de l’état
Données asynchrones
loading, success et errorRoutage
Rendu serveur
Tests
Mobile
JSX (JavaScript XML) est une extension de syntaxe qui permet d’écrire du balisage similaire au HTML directement dans un fichier JavaScript. C’est la manière standard de décrire l’interface utilisateur dans React.
// Ceci ressemble à du HTML, mais c'est du JSX !const element = <h1>Bonjour, monde !</h1>;L’un des avantages clés du JSX est la possibilité d’intégrer des expressions JavaScript directement dans le balisage à l’aide d’accolades {} :
const prenom = "Maude";const age = 22;
const element = ( <div> <h1>Bienvenue, {prenom} !</h1> <p>Vous avez {age} ans.</p> <p>L'an prochain, vous aurez {age + 1} ans.</p> </div>);Un seul élément racine — Un composant doit retourner un seul élément parent. Utilisez <div> ou le fragment <>...</> pour regrouper plusieurs éléments.
// ✅ Correct — un seul élément racinereturn ( <div> <h1>Titre</h1> <p>Contenu</p> </div>);
// ❌ Incorrect — deux éléments racinesreturn ( <h1>Titre</h1> <p>Contenu</p>);Toutes les balises doivent être fermées — Y compris les balises auto-fermantes comme <img /> et <br />.
// ✅ Correct<img src="photo.jpg" alt="Description" />
// ❌ Incorrect<img src="photo.jpg" alt="Description">className au lieu de class — Puisque class est un mot réservé en JavaScript, on utilise className en JSX.
// ✅ JSX<div className="conteneur">...</div>
// ❌ Ce n'est pas du JSX valide<div class="conteneur">...</div>Dans le développement moderne, les outils de compilation (build tools) jouent un rôle essentiel. Ils gèrent les dépendances du projet grâce à la modularité d’ES6 (import/export), optimisent le code en éliminant les dépendances inutiles (tree-shaking), et réduisent la taille des fichiers livrés au navigateur (bundling).
Vite est un outil de build moderne, conçu pour offrir un développement ultra-rapide. Son principal atout : l’utilisation des ES Modules natifs du navigateur, ce qui élimine le bundling lourd au démarrage et permet un rechargement quasi-instantané lors des modifications de code (Hot Module Replacement).
Vite est compatible avec React, Vue.js, Svelte, et d’autres frameworks.
Ouvrir un terminal et naviguer vers le dossier où vous souhaitez créer le projet.
Exécuter la commande de création :
npm create vite@latest mon-app -- --template reactnpm create vite@latest mon-app --- --template reactInstaller les dépendances :
cd mon-appnpm installLancer le serveur de développement :
npm run devL’application est accessible à l’adresse affichée (généralement http://localhost:5173).
PWA
Applications web offrant une expérience native : installation directe, fonctionnement hors ligne, notifications push, multiplateforme.
Architecture
Trois piliers : Service Workers (cache, interception réseau), Manifeste (manifest.json), et Cache API.
Cadriciel vs Librairie
Le cadriciel impose la structure et le flux ; la librairie offre des outils sans imposer d’organisation.
React + JSX
Librairie populaire pour des UI modulaires. JSX permet de combiner logique JavaScript et balisage dans un même fichier.
Vite
Outil de build moderne avec démarrage instantané et rechargement rapide grâce aux ES Modules natifs.
npm
Gestionnaire de paquets pour installer, mettre à jour et gérer les dépendances JavaScript.