From 555ecf9a9ca12b13e2d0ea9b94037a608037bec7 Mon Sep 17 00:00:00 2001 From: julieng Date: Mon, 15 Nov 2021 22:40:02 +0100 Subject: convert content to md --- .../add_to_home_screen/index.md | 216 ++++++++--------- .../progressive_web_apps/app_structure/index.md | 266 +++++++++++---------- files/fr/web/progressive_web_apps/index.md | 161 ++++++------- .../progressive_web_apps/installable_pwas/index.md | 108 ++++----- .../web/progressive_web_apps/introduction/index.md | 96 ++++---- files/fr/web/progressive_web_apps/loading/index.md | 149 ++++++------ .../offline_service_workers/index.md | 182 +++++++------- .../re-engageable_notifications_push/index.md | 179 ++++++++------ .../responsive_design_building_blocks/index.md | 77 ++---- 9 files changed, 724 insertions(+), 710 deletions(-) (limited to 'files') diff --git a/files/fr/web/progressive_web_apps/add_to_home_screen/index.md b/files/fr/web/progressive_web_apps/add_to_home_screen/index.md index 3a315c9568..59875ebc2c 100644 --- a/files/fr/web/progressive_web_apps/add_to_home_screen/index.md +++ b/files/fr/web/progressive_web_apps/add_to_home_screen/index.md @@ -9,78 +9,71 @@ tags: translation_of: Web/Progressive_web_apps/Add_to_home_screen original_slug: Web/Progressive_web_apps/ajouter_a_lecran_daccueil_a2hs --- -

Ajouter à l’écran d’accueil (A2HS en abrégé) est une fonctionnalité disponible dans les navigateurs pour smartphones modernes qui permet aux développeurs d’ajouter facilement et rapidement un raccourci à leur écran d’accueil, représentant leur application Web. Ce guide explique comment utiliser A2HS et ce que vous devez faire en tant que développeur pour permettre à vos utilisateurs d’en tirer parti.

+Ajouter à l’écran d’accueil (A2HS en abrégé) est une fonctionnalité disponible dans les navigateurs pour smartphones modernes qui permet aux développeurs d’ajouter facilement et rapidement un raccourci à leur écran d’accueil, représentant leur application Web. Ce guide explique comment utiliser A2HS et ce que vous devez faire en tant que développeur pour permettre à vos utilisateurs d’en tirer parti. -

Pourquoi A2HS?

+## Pourquoi A2HS? -

On pense que A2HS fait partie de la philosophie des applications Web progressives : offrir aux applications Web les mêmes avantages en matière d'expérience utilisateur que les applications natives. Cela fait partie du simple geste d’accéder à une application en appuyant sur son icône sur votre écran d’accueil, puis en l’affichant proprement dans sa propre fenêtre. A2HS rend cela possible.

+On pense que A2HS fait partie de la philosophie des applications Web progressives : offrir aux applications Web les mêmes avantages en matière d'expérience utilisateur que les applications natives. Cela fait partie du simple geste d’accéder à une application en appuyant sur son icône sur votre écran d’accueil, puis en l’affichant proprement dans sa propre fenêtre. A2HS rend cela possible. -

Quels navigateurs prennent en charge A2HS?

+## Quels navigateurs prennent en charge A2HS? -

A2HS est pris en charge par Mobile Chrome / Android Webview depuis la version 31, Opera pour Android depuis la version 32 et Firefox pour Android depuis la version 58 .

+A2HS est pris en charge par Mobile Chrome / Android Webview depuis la version 31, Opera pour Android depuis la version 32 et Firefox pour Android depuis la version 58 . -

Comment l'utiliser?

+## Comment l'utiliser? -

Nous avons écrit un exemple de site Web très simple ( voir la démo, et le code source ) qui ne fait pas grand chose, mais qui a été développé avec le code nécessaire pour pouvoir l'ajouter à un écran d'accueil. en tant qu'agent de service enregistré pour lui permettre d'être utilisé en mode hors connexion. L'exemple montre une série d'images de renard.

+Nous avons écrit un exemple de site Web très simple ( voir la démo, et le code source ) qui ne fait pas grand chose, mais qui a été développé avec le code nécessaire pour pouvoir l'ajouter à un écran d'accueil. en tant qu'agent de service enregistré pour lui permettre d'être utilisé en mode hors connexion. L'exemple montre une série d'images de renard. -

Si vous avez Firefox pour Android, utilisez-le pour accéder à notre démonstration à https://mdn.github.io/pwa-examples/a2hs/ . Vous verrez des images de renard, mais plus important encore, vous verrez une icône "accueil" avec une icône plus (+) à l'intérieur: il s'agit de l'icône "Ajouter à l'écran d'accueil" affichée pour tout site doté de A2HS.

+Si vous avez Firefox pour Android, utilisez-le pour accéder à notre démonstration à `https://mdn.github.io/pwa-examples/a2hs/` . Vous verrez des images de renard, mais plus important encore, vous verrez une icône "accueil" avec une icône plus (+) à l'intérieur: il s'agit de l'icône "Ajouter à l'écran d'accueil" affichée pour tout site doté de A2HS. -

+![](add-to-home-screen-icon.png) -

Appuyez sur cette icône pour afficher une bannière de confirmation. Une pression sur le gros bouton + AJOUTER À L'ÉCRAN D'ACCUEIL termine l'action et ajoute l'application à l'écran d'accueil. (Dans Android 8 et versions ultérieures, une boîte de dialogue d'autorisation au niveau du système "Ajouter à l'écran d'accueil" s'affiche en premier.)

+Appuyez sur cette icône pour afficher une bannière de confirmation. Une pression sur le gros bouton + _AJOUTER À L'ÉCRAN D'ACCUEIL_ termine l'action et ajoute l'application à l'écran d'accueil. (Dans Android 8 et versions ultérieures, une boîte de dialogue d'autorisation au niveau du système "Ajouter à l'écran d'accueil" s'affiche en premier.) -

+![](fx-a2hs-banner.png) -

Si vous avez Mobile Chrome disponible, l'expérience est légèrement différente. lors du chargement du site, une bannière d’installation apparaît vous demandant si vous souhaitez ajouter cette application à votre écran d’accueil.

+Si vous avez Mobile Chrome disponible, l'expérience est légèrement différente. lors du chargement du site, une bannière d’installation apparaît vous demandant si vous souhaitez ajouter cette application à votre écran d’accueil. -

+![](chrome-a2hs-banner.png) -
-

Note : Pour en savoir plus sur les bannières d'installation de Chrome, consultez l'article Web Installer des bannières Web App .

-
+> **Note :** Pour en savoir plus sur les bannières d'installation de Chrome, consultez l'article Web Installer des bannières Web App . -

Si vous choisissez de ne pas l'ajouter à votre écran d'accueil à ce stade, vous pourrez le faire ultérieurement à l'aide de l'icône Ajouter à l'écran d'accueil dans le menu principal de Chrome.

+Si vous choisissez de ne pas l'ajouter à votre écran d'accueil à ce stade, vous pourrez le faire ultérieurement à l'aide de l'icône _Ajouter à l'écran d'accueil_ dans le menu principal de Chrome. -

Quel que soit le navigateur que vous utilisez, lorsque vous choisissez d'ajouter l'application à votre écran d'accueil, celle-ci s'affiche avec un titre abrégé, de la même manière que les applications natives.

+Quel que soit le navigateur que vous utilisez, lorsque vous choisissez d'ajouter l'application à votre écran d'accueil, celle-ci s'affiche avec un titre abrégé, de la même manière que les applications natives. -

+![](a2hs-on-home-screen.png) -

Cet icône ouvre le site, mais en tant que WebApp, vous ne verrez plus l'interface utilisateur du navigateur.

+Cet icône ouvre le site, mais en tant que WebApp, vous ne verrez plus l'interface utilisateur du navigateur. -

Que faut-il pour utiliser A2HS?

+## Que faut-il pour utiliser A2HS? -

Pour permettre à votre application d'être ajoutée à un écran d'accueil, vous devez disposer des éléments suivants:

+Pour permettre à votre application d'être ajoutée à un écran d'accueil, vous devez disposer des éléments suivants: - +- Un site en HTTPS - Internet est de plus en plus plus sécurisée et de nombreuses technologies modernes (A2HS incluses) ne fonctionneront que dans des contextes sécurisés. +- Avoir un fichier "manifest" contenant les champs appropriés, lié à partir de l'en-tête HTML. +- Avoir une icône disponible pour l'affichage sur l'écran d'accueil. +- Chrome exige en outre que l'application ait un agent de service enregistré (par exemple, pour pouvoir fonctionner en mode hors connexion). -

Manifest

+### Manifest -

Le "manifest" est un fichier écrit au format JSON standard et doit être placé quelque part dans le répertoire de votre application (il est préférable que le fichier.webmanifest soit à la racine du site) avec le nom fichier.webmanifest (nous avons choisi manifest.webmanifest ). Il contient plusieurs champs qui définissent certaines informations sur l'application Web et sur son comportement. .

+Le "manifest" est un fichier écrit au format JSON standard et doit être placé quelque part dans le répertoire de votre application (il est préférable que le `fichier.webmanifest` soit à la racine du site) avec le nom `fichier.webmanifest` (nous avons choisi `manifest.webmanifest` ). Il contient plusieurs champs qui définissent certaines informations sur l'application Web et sur son comportement. . -
-

Note : L'extension .webmanifest est spécifiée dans la section Enregistrement du type de fichier, mais les navigateurs prennent aussi en charge les manifest avec d'autres extensions appropriées, par exemple .json .

-
+> **Note :** L'extension `.webmanifest` est spécifiée dans la section Enregistrement du type de fichier, mais les navigateurs prennent aussi en charge les manifest avec d'autres extensions appropriées, par exemple `.json` . -

 

-

Les champs nécessaires pour A2HS sont les suivants:

- +Les champs nécessaires pour A2HS sont les suivants: -

Le fichier "manifest" de notre exemple ressemble à ceci:

+- `background_color` : spécifie une couleur d'arrière-plan à utiliser dans certains contextes d'application. Le plus pertinent pour A2HS est l'écran de démarrage qui s'affiche lorsque l'icône de l'application sur l'écran d'accueil est activée et qu'elle commence à se charger (elle ne s'affiche actuellement que lorsque des applications ont été ajoutées à l'écran d'accueil par Chrome). +- `display` : Spécifie comment l'application doit être affichée. Pour que cela ressemble à une application distincte (et pas seulement à une page Web), vous devez choisir une valeur telle que `fullscreen` (aucune interface utilisateur n'est affichée) ou `standalone` (très similaire, mais des éléments d'interface utilisateur au niveau du système tels que la barre d'état. pourrait être visible). +- `icons` : spécifie les icônes à utiliser par le navigateur pour représenter l'application à différents endroits (par exemple sur le sélecteur de tâches ou, plus important encore, sur l'écran d'accueil). Nous n'en avons inclus qu'un dans notre démo. +- `name` et `short_name` : Ces champs fournissent un nom d'application à afficher lors de la représentation de l'application à différents endroits. `name` fournit le nom complet de l'application et `short_name` fournit un nom abrégé à utiliser lorsque l'espace disponible est insuffisant pour afficher le nom complet. Nous vous conseillons de fournir les deux si le nom de votre application est long. +- `start_url` : fournit un chemin d'accès de l'application. Notez qu'il doit s'agir d'une URL pointant vers l'index du site, par rapport à l'URL du "manifest". Sachez également que Chrome en a besoin avant d'afficher la bannière d'installation, tandis que Firefox ne l'exige pas pour afficher l'icône. -
{
+Le fichier "manifest" de notre exemple ressemble à ceci:
+
+```json
+{
   "background_color": "purple",
   "description": "Shows random fox pictures. Hey, at least it isn't cats.",
   "display": "fullscreen",
@@ -94,71 +87,79 @@ original_slug: Web/Progressive_web_apps/ajouter_a_lecran_daccueil_a2hs
   "name": "Awesome fox pictures",
   "short_name": "Foxes",
   "start_url": "/pwa-examples/a2hs/index.html"
-}
+} +``` + +### Icône + -

Icône

-

 

+Comme indiqué dans le "manifest" ci-dessus, nous incluons une icône de 192 x 192 px. Vous pouvez inclure plus de tailles si vous le souhaitez. Android choisira la taille la plus appropriée pour chaque cas d'utilisation différent. Vous pouvez également décider d'inclure différents types d'icônes afin que les appareils puissent utiliser le meilleur qu'ils puissent (par exemple, Chrome prend déjà en charge le format WebP). -

Comme indiqué dans le "manifest" ci-dessus, nous incluons une icône de 192 x 192 px. Vous pouvez inclure plus de tailles si vous le souhaitez. Android choisira la taille la plus appropriée pour chaque cas d'utilisation différent. Vous pouvez également décider d'inclure différents types d'icônes afin que les appareils puissent utiliser le meilleur qu'ils puissent (par exemple, Chrome prend déjà en charge le format WebP).

+Notez que le membre de `type` dans l'objet de chaque icône spécifie le type MIME de l'icône, afin que le navigateur puisse rapidement identifier le type de l'icône, puis l'ignorer et passer à une autre icône s'il ne le prend pas en charge. -

Notez que le membre de type dans l'objet de chaque icône spécifie le type MIME de l'icône, afin que le navigateur puisse rapidement identifier le type de l'icône, puis l'ignorer et passer à une autre icône s'il ne le prend pas en charge.

+Pour ce qui est de la conception de l’icône, vous devez suivre les mêmes pratiques que vous suivriez pour n’importe quelle icône Android (voir les directives de conception d’icône Android ). -

Pour ce qui est de la conception de l’icône, vous devez suivre les mêmes pratiques que vous suivriez pour n’importe quelle icône Android (voir les directives de conception d’icône Android ).

+### Lier le code HTML au "manifest" -

Lier le code HTML au "manifest"

+Pour terminer la configuration de votre "manifest", vous devez le référencer à partir du code HTML de la page d'accueil de votre application: -

Pour terminer la configuration de votre "manifest", vous devez le référencer à partir du code HTML de la page d'accueil de votre application:

+```html +< link rel = " manifest " href = " +``` -
< link rel = " manifest " href = "
+Les navigateurs prenant en charge A2HS sauront où chercher votre manifeste une fois celui-ci en place. -

Les navigateurs prenant en charge A2HS sauront où chercher votre manifeste une fois celui-ci en place.

+## Qu'est-ce que A2HS ne vous donne pas? -

Qu'est-ce que A2HS ne vous donne pas?

-

 

-

N'oubliez pas que lorsque vous ajoutez une application à votre écran d'accueil, cela la rend simplement facilement accessible. Elle ne télécharge pas les ressources et les données de l'application sur votre appareil et ne la rend pas disponible hors connexion, ou quelque chose du genre. Pour que votre application fonctionne en mode hors connexion, vous devez utiliser l' API Service Worker pour gérer le stockage hors connexion et, si nécessaire, le stockage Web ou IndexedDB pour stocker ses données.

+N'oubliez pas que lorsque vous ajoutez une application à votre écran d'accueil, cela la rend simplement facilement accessible. Elle ne télécharge pas les ressources et les données de l'application sur votre appareil et ne la rend pas disponible hors connexion, ou quelque chose du genre. Pour que votre application fonctionne en mode hors connexion, vous devez utiliser l' API Service Worker pour gérer le stockage hors connexion et, si nécessaire, le stockage Web ou IndexedDB pour stocker ses données. -

Dans notre exemple d'application, nous venons d'utiliser un agent de service pour stocker tous les fichiers nécessaires. Le fichier index.js est inscrit sur le site avec le bloc de code final dans le fichier index.js . Nous mettons ensuite en cache toutes les ressources du site à l'aide de l' API de cache et les servons à partir du cache plutôt que du réseau à l'aide du code contenu dans le fichier sw.js.

+Dans notre exemple d'application, nous venons d'utiliser un agent de service pour stocker tous les fichiers nécessaires. Le fichier [`index.js`](https://github.com/mdn/pwa-examples/blob/master/a2hs/index.js) est inscrit sur le site avec le bloc de code final dans le fichier [`index.js`](https://github.com/mdn/pwa-examples/blob/master/a2hs/index.js) . Nous mettons ensuite en cache toutes les ressources du site à l'aide de l' API de cache et les servons à partir du cache plutôt que du réseau à l'aide du code [contenu](https://github.com/mdn/pwa-examples/blob/master/a2hs/sw.js) dans le fichier [sw.js.](https://github.com/mdn/pwa-examples/blob/master/a2hs/sw.js) -

A2HS sur le bureau

+## A2HS sur le bureau -

Bien que conçu à l'origine pour améliorer l'expérience utilisateur sur les systèmes d'exploitation mobiles, il existe également une technique pour rendre les PWA installables sur les plates-formes de bureau.

+Bien que conçu à l'origine pour améliorer l'expérience utilisateur sur les systèmes d'exploitation mobiles, il existe également une technique pour rendre les PWA installables sur les plates-formes de bureau. -
-

Note : au moment de la rédaction de ce document, les fonctionnalités décrites ci-dessous n'étaient prises en charge que par les versions les plus récentes de Chrome: par défaut sous Windows et derrière l'indicateur #enable-desktop-pwas sous macOS.

-
+> **Note :** au moment de la rédaction de ce document, les fonctionnalités décrites ci-dessous n'étaient prises en charge que par les versions les plus récentes de Chrome: par défaut sous Windows et derrière l'indicateur `#enable-desktop-pwas` sous macOS. -

 

-

Ajout d'un bouton d'installation

-

Pour rendre notre PWA installable sur le bureau, nous avons d’abord ajouté un bouton à notre document pour permettre aux utilisateurs de procéder à l’installation. Ce bouton n’est pas automatiquement disponible sur les applications de bureau et l’installation doit être déclenchée par un geste de l’utilisateur:

+### Ajout d'un bouton d'installation -
<button class="add-button">Add to home screen</button>
+Pour rendre notre PWA installable sur le bureau, nous avons d’abord ajouté un bouton à notre document pour permettre aux utilisateurs de procéder à l’installation. Ce bouton n’est pas automatiquement disponible sur les applications de bureau et l’installation doit être déclenchée par un geste de l’utilisateur: -

Nous lui avons ensuite donné un style simple:

+```html + +``` -
.add-button {
+Nous lui avons ensuite donné un style simple:
+
+```css
+.add-button {
   position: absolute;
   top: 1px;
   left: 1px;
-}
+} +``` -

JavaScript pour gérer l'installation

+### JavaScript pour gérer l'installation -

Au bas de notre fichier index.js , nous avons ajouté du JavaScript pour gérer l'installation. Tout d'abord, nous déclarons une variable deferredPrompt (que nous expliquerons plus tard), obtenons une référence à notre bouton d'installation et le configurons pour display: none:

+Au bas de notre [fichier `index.js`](https://github.com/mdn/pwa-examples/blob/master/a2hs/index.js) , nous avons ajouté du JavaScript pour gérer l'installation. Tout d'abord, nous déclarons une variable `deferredPrompt` (que nous expliquerons plus tard), obtenons une référence à notre bouton d'installation et le configurons pour `display: none`: -
let deferredPrompt;
+```js
+let deferredPrompt;
 const addBtn = document.querySelector('.add-button');
-addBtn.style.display = 'none';
+addBtn.style.display = 'none'; +``` + +Nous masquons le bouton initialement car le PWA ne sera pas disponible pour l’installation tant qu’il ne respectera pas les critères A2HS. Lorsque cela se produit, les navigateurs prenant en charge déclenchent un événement `beforeinstallprompt` . Nous pouvons ensuite utiliser un gestionnaire comme celui ci-dessous pour gérer l'installation: -

Nous masquons le bouton initialement car le PWA ne sera pas disponible pour l’installation tant qu’il ne respectera pas les critères A2HS. Lorsque cela se produit, les navigateurs prenant en charge déclenchent un événement beforeinstallprompt . Nous pouvons ensuite utiliser un gestionnaire comme celui ci-dessous pour gérer l'installation:

-

 

-
window.addEventListener('beforeinstallprompt', (e) => {
+```js
+window.addEventListener('beforeinstallprompt', (e) => {
   // Prevent Chrome 67 and earlier from automatically showing the prompt
   e.preventDefault();
   // Stash the event so it can be triggered later.
@@ -166,13 +167,13 @@ addBtn.style.display = 'none';
// Update UI to notify the user they can add to home screen addBtn.style.display = 'block'; - addBtn.addEventListener('click', (e) => { + addBtn.addEventListener('click', (e) => { // hide our user interface that shows our A2HS button addBtn.style.display = 'none'; // Show the prompt deferredPrompt.prompt(); // Wait for the user to respond to the prompt - deferredPrompt.userChoice.then((choiceResult) => { + deferredPrompt.userChoice.then((choiceResult) => { if (choiceResult.outcome === 'accepted') { console.log('User accepted the A2HS prompt'); } else { @@ -181,51 +182,42 @@ addBtn.style.display = 'none'; deferredPrompt = null; }); }); -}); +}); +``` + -

 

-

Ici il faut:

+Ici il faut: - +- Appeler `Event.preventDefault()` pour empêcher Chrome 67 et les versions antérieures d'appeler automatiquement l'invite d'installation (ce comportement a été modifié dans Chrome 68). +- Stocker l'objet événement dans la variable `deferredPrompt` afin qu'il puisse être utilisé ultérieurement pour effectuer l'installation réelle. +- Configurer le bouton  `display: block` afin qu'il apparaisse dans l'interface utilisateur sur laquelle l'utilisateur peut cliquer. +- Définir un gestionnaire de `click` pour le bouton. -

Le gestionnaire de clics contient les étapes suivantes:

+Le gestionnaire de clics contient les étapes suivantes: - +- Cacher à nouveau le bouton avec `display: none` - il n'est plus nécessaire une fois l'application installée. +- Utilisez la méthode `prompt()` disponible sur l'objet d'événement `beforeinstallprompt` (stocké dans `deferredPrompt` ) pour déclencher l'affichage de l'invite d'installation. +- Répondez à l'interaction de l'utilisateur avec l'invite à l'aide de la propriété `userChoice` , de nouveau disponible sur l'objet d'événement `beforeinstallprompt` . +- Définissez `deferredPrompt` sur null car il n'est plus nécessaire. -

Ainsi, lorsque vous cliquez sur le bouton, l'invite d'installation apparaît.

+Ainsi, lorsque vous cliquez sur le bouton, l'invite d'installation apparaît. -

+![](chrome-desktop-a2hs-banner.png) -

Si l'utilisateur sélectionne Installer , l'application est installée (disponible en tant qu'application de bureau autonome) et le bouton Installer ne s'affiche plus (l'événement onbeforeinstallprompt ne se déclenche plus si l'application est déjà installée). Lorsque vous ouvrez l'application, celle-ci apparaît dans sa propre fenêtre:

+Si l'utilisateur sélectionne _Installer_ , l'application est installée (disponible en tant qu'application de bureau autonome) et le bouton Installer ne s'affiche plus (l'événement `onbeforeinstallprompt` ne se déclenche plus si l'application est déjà installée). Lorsque vous ouvrez l'application, celle-ci apparaît dans sa propre fenêtre: -

+![](a2hs-installed-desktop.png) -

Si l'utilisateur sélectionne Annuler , l'état de l'application revient à ce qu'il était avant le clic sur le bouton.

+Si l'utilisateur sélectionne _Annuler_ , l'état de l'application revient à ce qu'il était avant le clic sur le bouton. -
-

Note : Le code de cette section provient principalement des bannières d'installation de l' application / Ajouter à l'écran d'accueil de Pete LaPage.

-
+> **Note :** Le code de cette section provient principalement des bannières d'installation de l' application / Ajouter à l'écran d'accueil de Pete LaPage. -

Voir aussi

+## Voir aussi -

 

- -

 

+- Applications web progressives (PWA +- Service Worker API +- Référence du "manifest" Web +- App install banners diff --git a/files/fr/web/progressive_web_apps/app_structure/index.md b/files/fr/web/progressive_web_apps/app_structure/index.md index 6c97975899..6b3841be1a 100644 --- a/files/fr/web/progressive_web_apps/app_structure/index.md +++ b/files/fr/web/progressive_web_apps/app_structure/index.md @@ -3,128 +3,127 @@ title: Structure d'une Progressive web app slug: Web/Progressive_web_apps/App_structure translation_of: Web/Progressive_web_apps/App_structure --- -
{{PreviousMenuNext("Web/Apps/Progressive/Introduction", "Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive")}}
+{{PreviousMenuNext("Web/Apps/Progressive/Introduction", "Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive")}} -

Maintenant que nous avons pris connaissances des principes théoriques sur lesquelles sont bâties les PWAs, penchons nous sur la structure recommandée d'une vraie application. Nous commencerons par analyser l'application js13kPWA et par examiner pourquoi elle est construite de cette façon et quels bénéfices elle en retire.

+Maintenant que nous avons pris connaissances des principes théoriques sur lesquelles sont bâties les PWAs, penchons nous sur la structure recommandée d'une vraie application. Nous commencerons par analyser l'application [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) et par examiner pourquoi elle est construite de cette façon et quels bénéfices elle en retire. -

Architecture d'une application

+## Architecture d'une application -

Il existe deux approches majeures distinctes pour générer un site web - côté serveur ou côté client. Les deux approches ont leurs avantages et leurs inconvénients et vous pouvez panacher jusqu'à un certain point les deux approches. 

+Il existe deux approches majeures distinctes pour générer un site web - côté serveur ou côté client. Les deux approches ont leurs avantages et leurs inconvénients et vous pouvez panacher jusqu'à un certain point les deux approches. - +- La génération côté serveur (Server-side rendering ou SSR) signifie qu'un site web est généré sur le serveur, si bien qu'il bénéficie d'un temps de chargement initial plus court mais la navigation d'une page à l'autre impose de télécharger à chaque foois un nouveau contenu HTML. Cela fonctionne parfaitement pour les navigateurs mais au prix d'un temps de navigation accru pour passer d'une page à l'autre, et donc diminue la performance générale perçue - charger une page nécessite un nouvel allerr-retour avec le serveur. +- La génération côté client (Client-side rendering ou CSR) permet au site web d'être mis à jour presque instantanément en navigant sur des pages différentes mais nécessite au début un téléchargement intial plus important et un travail de rendu supplémentaires côté client. Le site web est plus lent lors d'une première visite mais peut être plus rapide ensuite quand on y navigue. -

Mélanger SSR et CSR peut permettre d'obtenir de meilleurs résultats - vous pouvez générer un site web côté serveur, mettre en cache son contenu puis mettre à jour le rendu côté client si et quand c'est nécessaire. Le chargement de la première page est rapide grâce au SSR et la navigation entre les pages est fluide car le client peut regénérer la page en ne modifiant que les parties qui ont changé.

+Mélanger SSR et CSR peut permettre d'obtenir de meilleurs résultats - vous pouvez générer un site web côté serveur, mettre en cache son contenu puis mettre à jour le rendu côté client si et quand c'est nécessaire. Le chargement de la première page est rapide grâce au SSR et la navigation entre les pages est fluide car le client peut regénérer la page en ne modifiant que les parties qui ont changé. -

Les PWAs peuvent être construite en utilisant l'approche que vous préférez, mais certaines fonctionneront mieux que les autres. L'approche la plus populaire est celle utilisant le concept d' "app shell"; qui mélange SSR et CSR exactement comme cela a été décrit plus haut et se conforme de surcroit à la méthodologie "déconnectée d'abord" ("offline first") que nous expliquerons en détails dans de prochains articles et que nous utiliserons dans notre application exemple. Il existe également une nouvelle approche utilisant l'API Streams et dont nous parlerons brièvement.

+Les PWAs peuvent être construite en utilisant l'approche que vous préférez, mais certaines fonctionneront mieux que les autres. L'approche la plus populaire est celle utilisant le concept d' "app shell"; qui mélange SSR et CSR exactement comme cela a été décrit plus haut et se conforme de surcroit à la méthodologie "déconnectée d'abord" ("offline first") que nous expliquerons en détails dans de prochains articles et que nous utiliserons dans notre application exemple. Il existe également une nouvelle approche utilisant l'[API Streams](/fr/docs/Web/API/Streams_API) et dont nous parlerons brièvement. -

App shell

+## App shell -

Le concept d'App shell s'occupe de charger une interface utilisateur minimale dès que possible puis de la mettre en cache de façon à ce qu'elle soit disponible en mode déconnecté lors des visites suivantes, avant de charger tout le contenu de l'application. De cette façon, la prochaine fois que quelqu'un visite l'application avec un appareil, l'interface utilisateur est chargée immédiatement depuis le cache puis les nouveaux contenus sont demandés au serveur (s'ils ne sont pas déjà disponibles dans le cache).

+Le concept d'App shell s'occupe de charger une interface utilisateur minimale dès que possible puis de la mettre en cache de façon à ce qu'elle soit disponible en mode déconnecté lors des visites suivantes, avant de charger tout le contenu de l'application. De cette façon, la prochaine fois que quelqu'un visite l'application avec un appareil, l'interface utilisateur est chargée immédiatement depuis le cache puis les nouveaux contenus sont demandés au serveur (s'ils ne sont pas déjà disponibles dans le cache). -

Cette structure est rapide et est également ressentie comme telle par l'utilisateur car il voit "quelque chose" instantanément, plutôt qu'un indicateur de chargement en train de tourner ou une page blanche. Cela permet également au site web d'être accessible en mode déconnecté si une connexion réseau n'est pas disponible.

+Cette structure est rapide et est également ressentie comme telle par l'utilisateur car il voit "quelque chose" instantanément, plutôt qu'un indicateur de chargement en train de tourner ou une page blanche. Cela permet également au site web d'être accessible en mode déconnecté si une connexion réseau n'est pas disponible. -

Nous pouvons contrôler ce qui est demandé au serveur et ce qui est récupéré dans le cache grâce à un service worker qui sera expliqué en détail dans le prochain article - pour le moment, concentrons-nous sur la structure en elle-même.

+Nous pouvons contrôler ce qui est demandé au serveur et ce qui est récupéré dans le cache grâce à un [service worker](/fr/docs/Web/API/Service_Worker_API) qui sera expliqué en détail dans le prochain article - pour le moment, concentrons-nous sur la structure en elle-même. -

Pourquoi dois-je l'utiliser ?

+### Pourquoi dois-je l'utiliser ? -

Cette architecture permet à un site web de bénéficier de la plupart des fonctionnalités PWA - elle met en cache l'app shell et gère le contenu dynamique d'une manière qui améliore grandement les performances. En plus de la structure de base, vous pouvez ajouter d'autres fonctionnalités telles que l'ajouter à l'écran d'accueil ou l'envoi de notifications, sachant que l'application fonctionnera toujours correctement si elles ne sont pas prises en charge par le navigateur de l'utilisateur - c'est la beauté de l'amélioration continue.

+Cette architecture permet à un site web de bénéficier de la plupart des fonctionnalités PWA - elle met en cache l'app shell et gère le contenu dynamique d'une manière qui améliore grandement les performances. En plus de la structure de base, vous pouvez ajouter d'autres fonctionnalités telles que [l'ajouter à l'écran d'accueil](/fr/docs/Web/Apps/Progressive/Add_to_home_screen) ou [l'envoi de notifications](/fr/docs/Web/API/Push_API), sachant que l'application fonctionnera toujours correctement si elles ne sont pas prises en charge par le navigateur de l'utilisateur - c'est la beauté de l'amélioration continue. -

Le site web se comporte comme une application native, offrant une interaction instantannée et de solides performances tout en conservant les avantages du web.

+Le site web se comporte comme une application native, offrant une interaction instantannée et de solides performances tout en conservant les avantages du web. -

Être accessible par un lien, progressive et de conception adaptative

+### Être accessible par un lien, progressive et de conception adaptative -

Il est important de se rappeler les avantages des PWA et de les garder à l'esprit lorsqu'on conçoit l'application. L'approche app shell permet aux sites web d'être :

+Il est important de se rappeler les avantages des PWA et de les garder à l'esprit lorsqu'on conçoit l'application. L'approche app shell permet aux sites web d'être : - +- Accessible par un lien: Même s'il se comporte comme une application native, il reste un site web - vous pouvez cliquer sur les liens d'une page et envoyer une URL à quelqu'un si vous voulez le partager. +- Progressive: Commencer avec un "bon vieux site web basic” et ajouter progressivement de nouvelles fonctionnalités tout en se rappelant de détecter si elles sont disponibles dans le navigateur et de gérer proprement toute erreur qui pourrait survenir si la prise en charge n'est pas disponible. Par exemple, un mode déconnecté possible grâce aux service workers n'est qu'une caractéristique bonus qui améliore l'expérience sur le site web, mais ce dernier reste totalement fonctionnel sans elle. +- Adaptatif: La conception web adaptative s'applique également aux applications web progressives, attendu que les deux sont principalement destinés aux appareils mobiles. Il y a tellements d'appareils différents en plus des navigateurs - il est important de préparer votre site web à fonctionner sur différentes tailles d'écran, supports d'affichage ou densité de pixels, en utilisant des technologies telles que  [les tags meta viewport](/fr/docs/Mozilla/Mobile/Viewport_meta_tag), [les reqêtes media CSS](/fr/docs/Web/CSS/Media_Queries/Using_media_queries), [les Flexbox](/fr/docs/Web/CSS/CSS_Flexible_Box_Layout) et les [Grid CSS](/fr/docs/Web/CSS/CSS_Grid_Layout). -

Approche différente : les streams

+## Approche différente : les streams -

Une approche totalement différente du rendu côté serveur - ou client - peut être obtenue à l'aide de l'API Streams. Avec un peu d'aide des service workers, les streams peuvent grandement améliorer la façon dont nous analysons le contenu.

+Une approche totalement différente du rendu côté serveur - ou client - peut être obtenue à l'aide de l'[API Streams](/fr/docs/Web/API/Streams_API). Avec un peu d'aide des service workers, les streams peuvent grandement améliorer la façon dont nous analysons le contenu. -

Le modèle app shell nécessite que toutes les ressources soient disponibles avant que le site puisse commencer à être rendu. C'est différent avec HTML pour lequel le navigateur diffuse immédiatement les données si bien que vous pouvez voir quand les éléments sont chargés et et rendus sur le site web. Pour que le JavaScript soit "opérationnel", cependant, il faut attendre qu'il ait été entièrement téléchargé au préalable.

+Le modèle app shell nécessite que toutes les ressources soient disponibles avant que le site puisse commencer à être rendu. C'est différent avec HTML pour lequel le navigateur diffuse immédiatement les données si bien que vous pouvez voir quand les éléments sont chargés et et rendus sur le site web. Pour que le JavaScript soit "opérationnel", cependant, il faut attendre qu'il ait été entièrement téléchargé au préalable. -

L'API Streams permet aux développeurs d'avoir un accès direct au flux de données provenant du serveur - si vous voulez exécuter une opération sur les données (par exemple ajouter un filtre à une vidéo), vous n'avez plus besoin d'attendre que tout soit téléchargé et converti en un blob (ou autre) - vous pouvez commencer immédiatement. Cela permet un contrôle fin - le flux peut être démarré, chaîné avec un autre flux, annulé, ses erreurs contrôlées, et plus.

+L'API Streams permet aux développeurs d'avoir un accès direct au flux de données provenant du serveur - si vous voulez exécuter une opération sur les données (par exemple ajouter un filtre à une vidéo), vous n'avez plus besoin d'attendre que tout soit téléchargé et converti en un blob (ou autre) - vous pouvez commencer immédiatement. Cela permet un contrôle fin - le flux peut être démarré, chaîné avec un autre flux, annulé, ses erreurs contrôlées, et plus. -

En théorie, le flux est un meilleur modèle, mais il est également plus complexe et au moment de la rédaction (mars 2018), l'API Stream est toujours un travail en cours et pas encore totalement disponible pour l'ensemble des navigateurs principaux. Quand elle sera disponible, elle sera le moyen le plus rapide de servir le contenu - les bénéfices sont sur le point d'être énormes en terme de performance.

+En théorie, le flux est un meilleur modèle, mais il est également plus complexe et au moment de la rédaction (mars 2018), l'API Stream est toujours un travail en cours et pas encore totalement disponible pour l'ensemble des navigateurs principaux. Quand elle sera disponible, elle sera le moyen le plus rapide de servir le contenu - les bénéfices sont sur le point d'être énormes en terme de performance. -

Pour voir des exemples fonctionnels et disposer de davantage d'information, voir la documention de l'API Streams.

+Pour voir des exemples fonctionnels et disposer de davantage d'information, voir [la documention de l'API Streams](/fr/docs/Web/API/Streams_API). -

Structure de notre application exemple

+## Structure de notre application exemple -

La structure du site web js13kPWA est plutôt simple: elle consiste en un simple fichier HTML (index.html) avec un style CSS basique (style.css) et quelques images, scripts et polices de caractères. La structure du répertoire ressemble à ceci:

+La structure du site web [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) est plutôt simple: elle consiste en un simple fichier HTML ([index.html](https://github.com/mdn/pwa-examples/blob/master/js13kpwa/index.html)) avec un style CSS basique ([style.css](https://github.com/mdn/pwa-examples/blob/master/js13kpwa/style.css)) et quelques images, scripts et polices de caractères. La structure du répertoire ressemble à ceci: -

Folder structure of js13kPWA.

+![Folder structure of js13kPWA.](js13kpwa-directory.png) -

Le HTML

+### Le HTML -

Du point de vue HTML, l'app shell est tout ce qui est à l'extérieur de la section content:

+Du point de vue HTML, l'app shell est tout ce qui est à l'extérieur de la section content: -
<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<title>js13kGames A-Frame entries</title>
-	<meta name="description" content="A list of A-Frame entries submitted to the js13kGames 2017 competition, used as an example for the MDN articles about Progressive Web Apps.">
-	<meta name="author" content="end3r">
-	<meta name="theme-color" content="#B12A34">
-	<meta name="viewport" content="width=device-width, initial-scale=1">
-	<meta property="og:image" content="icons/icon-512.png">
-	<link rel="shortcut icon" href="favicon.ico">
-	<link rel="stylesheet" href="style.css">
-	<link rel="manifest" href="js13kpwa.webmanifest">
-	<script src="data/games.js" defer></script>
-	<script src="app.js" defer></script>
-</head>
-<body>
-<header>
-	<p><a class="logo" href="http://js13kgames.com"><img src="img/js13kgames.png" alt="js13kGames"></a></p>
-</header>
-<main>
-	<h1>js13kGames A-Frame entries</h1>
-	<p class="description">List of games submitted to the <a href="http://js13kgames.com/aframe">A-Frame category</a> in the <a href="http://2017.js13kgames.com">js13kGames 2017</a> competition. You can <a href="https://github.com/mdn/pwa-examples/blob/master/js13kpwa">fork js13kPWA on GitHub</a> to check its source code.</p>
-	<button id="notifications">Request dummy notifications</button>
-	<section id="content">
+```html
+
+
+
+	
+	js13kGames A-Frame entries
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+
+
+

+
+
+

js13kGames A-Frame entries

+

List of games submitted to the A-Frame category in the js13kGames 2017 competition. You can fork js13kPWA on GitHub to check its source code.

+ +
// Le contenu est inséré ici - </section> -</main> -<footer> - <p>© js13kGames 2012-2018, created and maintained by <a href="http://end3r.com">Andrzej Mazur</a> from <a href="http://enclavegames.com">Enclave Games</a>.</p> -</footer> -</body> -</html>
- -

La section {{htmlelement("head")}} contient certaines informations de base telles que le titre, la description et des liens vers les CSS, le manifeste web, le fichier JS contenant les jeux et  app.js — c'est là où notre application JavaScript est initialisée. Le {{htmlelement("body")}} est divisé en {{htmlelement("header")}} (contenant les images liées), {{htmlelement("main")}} la page (avec le titre, la description et un emplacement pour le contenu) et  {{htmlelement("footer")}} (le copyright et les liens).

- -

Le seul travail de l'application est de lister toutes les entrées A-Frame de la compétition js13kGames 2017. Comme vous pouvez le voir, c'est un site web en une page tout ce qu'il y a de plus ordinaire - le but est d'avoir quelque chose de simple afin que nous puissions nous concentrer sur l'implémentation des réelles fonctionnalités PWA.

- -

Le CSS

- -

Le CSS est également aussi linéaire que possible: il utilise {{cssxref("@font-face")}} pour charger et utiliser une police de caractères personnalisée et il applique quelques mises en forme simples des éléments HTML. L'approche globale est d'avoir une conception qui soit belle à la fois sur les mobiles (avec une approche de conception adaptative) et sur les ordinateurs de bureau.

- -

Le fichier JavaScript principal

- -

Le fichier app.js file exécute plusieurs choses que nous regarderons de plus près dans les prochains articles. Avant tout, il génère le contenu à l'aide de ce template:

- -
var template = "<article>\n\
-    <img src='data/img/SLUG.jpg' alt='NAME'>\n\
-    <h3>#POS. NAME</h3>\n\
-    <ul>\n\
-    <li><span>Author:</span> <strong>AUTHOR</strong></li>\n\
-    <li><span>Twitter:</span> <a href='https://twitter.com/TWITTER'>@TWITTER</a></li>\n\
-    <li><span>Website:</span> <a href='http://WEBSITE/'>WEBSITE</a></li>\n\
-    <li><span>GitHub:</span> <a href='https://GITHUB'>GITHUB</a></li>\n\
-    <li><span>More:</span> <a href='http://js13kgames.com/entries/SLUG'>js13kgames.com/entries/SLUG</a></li>\n\
-    </ul>\n\
-</article>";
+	
+
+
+
+
+```
+
+La section {{htmlelement("head")}} contient certaines informations de base telles que le titre, la description et des liens vers les CSS, le manifeste web, le fichier JS contenant les jeux et  app.js — c'est là où notre application JavaScript est initialisée. Le {{htmlelement("body")}} est divisé en {{htmlelement("header")}} (contenant les images liées), {{htmlelement("main")}} la page (avec le titre, la description et un emplacement pour le contenu) et  {{htmlelement("footer")}} (le copyright et les liens).
+
+Le seul travail de l'application est de lister toutes les entrées A-Frame de la compétition js13kGames 2017. Comme vous pouvez le voir, c'est un site web en une page tout ce qu'il y a de plus ordinaire - le but est d'avoir quelque chose de simple afin que nous puissions nous concentrer sur l'implémentation des réelles fonctionnalités PWA.
+
+### Le CSS
+
+Le CSS est également aussi linéaire que possible: il utilise {{cssxref("@font-face")}} pour charger et utiliser une police de caractères personnalisée et il applique quelques mises en forme simples des éléments HTML. L'approche globale est d'avoir une conception qui soit belle à la fois sur les mobiles (avec une approche de conception adaptative) et sur les ordinateurs de bureau.
+
+### Le fichier JavaScript principal
+
+Le fichier app.js file exécute plusieurs choses que nous regarderons de plus près dans les prochains articles. Avant tout, il génère le contenu à l'aide de ce template:
+
+```js
+var template = "";
 var content = '';
-for(var i=0; i<games.length; i++) {
+for(var i=0; i','-');
     content += entry;
 };
-document.getElementById('content').innerHTML = content;
+document.getElementById('content').innerHTML = content; +``` -

Ensuite, il enregistre un service worker:

+Ensuite, il enregistre un service worker: -
if('serviceWorker' in navigator) {
+```js
+if('serviceWorker' in navigator) {
     navigator.serviceWorker.register('/pwa-examples/js13kpwa/sw.js');
-};
+}; +``` -

Le bloc de code suivant demande la permission d'émettre des notifications quand un bouton est cliqué:

+Le bloc de code suivant demande la permission d'émettre des notifications quand un bouton est cliqué: -
var button = document.getElementById("notifications");
+```js
+var button = document.getElementById("notifications");
 button.addEventListener('click', function(e) {
     Notification.requestPermission().then(function(result) {
         if(result === 'granted') {
             randomNotification();
         }
     });
-});
+}); +``` -

Le dernier bloc crée des notifications qui affichent  un élément choisi au hasard dans la liste des jeux:

+Le dernier bloc crée des notifications qui affichent  un élément choisi au hasard dans la liste des jeux: -
function randomNotification() {
+```js
+function randomNotification() {
     var randomItem = Math.floor(Math.random()*games.length);
     var notifTitle = games[randomItem].name;
     var notifBody = 'Created by '+games[randomItem].author+'.';
@@ -167,17 +172,21 @@ button.addEventListener('click', function(e) {
     }
     var notif = new Notification(notifTitle, options);
     setTimeout(randomNotification, 30000);
-}
+} +``` -

Le service worker

+### Le service worker -

Le dernier fichier que nous allons rapidement regarder est le service worker: sw.js — il importe d'abord les données du fichier games.js:

+Le dernier fichier que nous allons rapidement regarder est le service worker: sw\.js — il importe d'abord les données du fichier games.js: -
self.importScripts('data/games.js');
+```js +self.importScripts('data/games.js'); +``` -

Ensuite, il crée une liste de tous les fichiers à mettre en cache, à la fois à partir de l'app shell et du contenu:

+Ensuite, il crée une liste de tous les fichiers à mettre en cache, à la fois à partir de l'app shell et du contenu: -
var cacheName = 'js13kPWA-v1';
+```js
+var cacheName = 'js13kPWA-v1';
 var appShellFiles = [
   '/pwa-examples/js13kpwa/',
   '/pwa-examples/js13kpwa/index.html',
@@ -199,14 +208,16 @@ var appShellFiles = [
   '/pwa-examples/js13kpwa/icons/icon-512.png'
 ];
 var gamesImages = [];
-for(var i=0; i<games.length; i++) {
+for(var i=0; i
+var contentToCache = appShellFiles.concat(gamesImages);
+```
 
-

Le bloc suivant définit la phase d'initialisation de notre service worker lors de laquelle tous les fichiers contenus dans la liste précédente sont effectivement mis en cache:

+Le bloc suivant définit la phase d'initialisation de notre service worker lors de laquelle tous les fichiers contenus dans la liste précédente sont effectivement mis en cache: -
self.addEventListener('install', function(e) {
+```js
+self.addEventListener('install', function(e) {
   console.log('[Service Worker] Install');
   e.waitUntil(
     caches.open(cacheName).then(function(cache) {
@@ -214,11 +225,13 @@ var contentToCache = appShellFiles.concat(gamesImages);
return cache.addAll(contentToCache); }) ); -});
+}); +``` -

Finalement, nous définissons ici le gestionnaire de l'événement fetch du service worker afin qu'il récupère le contenu du cache s'il y est disponible, offrant un fonctionnement hors connexion:

+Finalement, nous définissons ici le gestionnaire de l'événement fetch du service worker afin qu'il récupère le contenu du cache s'il y est disponible, offrant un fonctionnement hors connexion: -
self.addEventListener('fetch', function(e) {
+```js
+self.addEventListener('fetch', function(e) {
   e.respondWith(
     caches.match(e.request).then(function(r) {
       console.log('[Service Worker] Fetching resource: '+e.request.url);
@@ -231,13 +244,15 @@ var contentToCache = appShellFiles.concat(gamesImages);
}); }) ); -}); +}); +``` -

Les données JavaScript

+### Les données JavaScript -

Les données des jeux sont présentes dans le dossier data sous la forme d'un objet JavaScript (games.js):

+Les données des jeux sont présentes dans le dossier data sous la forme d'un objet JavaScript ([games.js](https://github.com/mdn/pwa-examples/blob/master/js13kpwa/data/games.js)): -
var games = [
+```js
+var games = [
     {
         slug: 'lost-in-cyberspace',
         name: 'Lost in Cyberspace',
@@ -263,14 +278,15 @@ var contentToCache = appShellFiles.concat(gamesImages);
website: '', github: 'github.com/coderprateek/Emma-3D' } -]; +]; +``` -

Chaque entrée possède sa propre image dans le dossier data/img. Ceci est notre contenu chargé dans la section content via JavaScript.

+Chaque entrée possède sa propre image dans le dossier data/img. Ceci est notre contenu chargé dans la section content via JavaScript. -

A suivre

+## A suivre -

Dans le prochain article, nous regarderons plus en détail comment l'app shell et le contenu sont mis en cache pour une utilisation en mode déconnecté grâce au service worker.

+Dans le prochain article, nous regarderons plus en détail comment l'app shell et le contenu sont mis en cache pour une utilisation en mode déconnecté grâce au service worker. -

{{PreviousMenuNext("Web/Apps/Progressive/Introduction", "Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive")}}

+{{PreviousMenuNext("Web/Apps/Progressive/Introduction", "Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive")}} -

{{QuickLinksWithSubpages("/en-US/docs/Web/Progressive_web_apps/")}}

+{{QuickLinksWithSubpages("/en-US/docs/Web/Progressive_web_apps/")}} diff --git a/files/fr/web/progressive_web_apps/index.md b/files/fr/web/progressive_web_apps/index.md index 0d4f57a709..6f5ec28f28 100644 --- a/files/fr/web/progressive_web_apps/index.md +++ b/files/fr/web/progressive_web_apps/index.md @@ -12,88 +12,79 @@ tags: - Web app translation_of: Web/Progressive_web_apps --- -

{{draft}}

- -

Les applications Web progressives utilisent des API Web modernes ainsi qu'une stratégie d'amélioration progressive traditionnelle pour créer des applications Web multiplateformes. Ces applications fonctionnent partout et fournissent quelques fonctionnalités qui donnent à l'expérience utilisateur les mêmes avantages que les applications natives. Cet ensemble de documents explique tout ce qu'il faut savoir sur ces applications.

- -

Pour qu'une application Web soit considérée comme un PWA, techniquement parlant, il devrait présenter les caractéristiques suivantes : Secure contexts ({{Glossary("HTTPS")}}), un ou plusieurs Service Workers et un fichier manifest.

- -
-
Secure contexts (HTTPS)
-
L'application web doit être servie sur un réseau sécurisé. Être un site sécurisé est non seulement une bonne pratique, mais cela fait également de votre application web un site de confiance, surtout si les utilisateurs ont besoin d'effectuer des transactions sécurisées. La plupart des fonctionnalités liées à un PWA telles que la géolocalisation et même les Service Workers ne sont disponibles qu'une fois l'application chargée à l'aide de HTTPS.
-
Service workers
-
Un Service Worker est un script qui permet d'intercepter et de contrôler la façon dont un navigateur web traite ses requêtes réseau et la mise en cache des ressources. Avec les Service Workers, les développeurs web peuvent créer des pages web rapides et fiables et des expériences hors ligne.
-
Manifest file
-
Un fichier {{Glossary("JSON")}} qui contrôle la façon dont votre application apparaît à l'utilisateur et garantit que les applications web progressives sont découvrables. Il décrit le nom de l'application, l'URL de démarrage, les icônes et tous les autres détails nécessaires pour transformer le site web en un format similaire à celui d'une application.
-
- -

Avantages PWA

- -

Les PWA doivent pouvoir être découvertes, installées, reliées, indépendantes du réseau, progressives, réengageables, réactives et sûres. Pour en savoir plus sur la signification de ces éléments, lisez Avantages des applications web progressives.

- -

Pour savoir comment mettre en œuvre les PWA, lisez notre guide du développeur de PWA.

- -

Documentation

- -

<-- La liste automatique temporaire ci-dessous sera bientôt remplacée -->

- -

{{LandingPageListSubpages}}

- -
-

Attention : ce qui se trouve en dessous de ce point est un reste de l'ancienne version de cette page et sera remanié au fur et à mesure de la révision des autres contenus.

-
- -

Guides de base des PWA

- -

Les guides suivants vous montrent ce qu'il faut faire pour mettre en œuvre une PWA, en examinant un exemple simple et en vous montrant comment tous les éléments fonctionnent.

- -
    -
  1. Introduction aux applications web progressives
  2. -
  3. Structure progressive des applications web
  4. -
  5. Faire travailler les VAP en différé avec les travailleurs des services
  6. -
  7. Comment rendre les PWA installables
  8. -
  9. Comment rendre les PWA réengageables en utilisant les notifications et le Push
  10. -
  11. Chargement progressif
  12. -
  13. Collection de ressources, de codelabs et d'outils dont vous avez besoin pour construire des PWA par l'équipe de pwafire.org
  14. -
  15. Mise en place de votre environnement de développement d'applications web progressives
  16. -
- -

Guides technologiques

- - -

Outils

- - - -
{{QuickLinksWithSubpages("/fr/docs/Web/Progressive_web_apps/")}}
+{{draft}} + +Les **applications Web progressives** utilisent des API Web modernes ainsi qu'une stratégie d'amélioration progressive traditionnelle pour créer des applications Web multiplateformes. Ces applications fonctionnent partout et fournissent quelques fonctionnalités qui donnent à l'expérience utilisateur les mêmes avantages que les applications natives. Cet ensemble de documents explique tout ce qu'il faut savoir sur ces applications. + +Pour qu'une application Web soit considérée comme un PWA, techniquement parlant, il devrait présenter les caractéristiques suivantes : [Secure contexts](/fr/docs/Web/Security/Secure_Contexts) (**{{Glossary("HTTPS")}}**), un ou plusieurs [Service Workers](/fr/docs/Web/API/Service_Worker_API) et un [fichier manifest](/fr/docs/Web/Manifest). + +- [Secure contexts](/fr/docs/Web/Security/Secure_Contexts) ([HTTPS](/fr/docs/Glossaire/https)) + - : L'application web doit être servie sur un réseau sécurisé. Être un site sécurisé est non seulement une bonne pratique, mais cela fait également de votre application web un site de confiance, surtout si les utilisateurs ont besoin d'effectuer des transactions sécurisées. La plupart des fonctionnalités liées à un PWA telles que la géolocalisation et même les Service Workers ne sont disponibles qu'une fois l'application chargée à l'aide de HTTPS. +- [Service workers](/fr/docs/Web/API/Service_Worker_API) + - : Un _Service Worker_ est un script qui permet d'intercepter et de contrôler la façon dont un navigateur web traite ses requêtes réseau et la mise en cache des ressources. Avec les Service Workers, les développeurs web peuvent créer des pages web rapides et fiables et des expériences hors ligne. +- [Manifest file](/fr/docs/Web/Manifest) + - : Un fichier {{Glossary("JSON")}} qui contrôle la façon dont votre application apparaît à l'utilisateur et garantit que les applications web progressives sont découvrables. Il décrit le nom de l'application, l'URL de démarrage, les icônes et tous les autres détails nécessaires pour transformer le site web en un format similaire à celui d'une application. + +## Avantages PWA + +Les PWA doivent pouvoir être découvertes, installées, reliées, indépendantes du réseau, progressives, réengageables, réactives et sûres. Pour en savoir plus sur la signification de ces éléments, lisez [Avantages des applications web progressives](/fr/docs/Web/Progressive_web_apps/Introduction). + +Pour savoir comment mettre en œuvre les PWA, lisez notre [guide du développeur de PWA](/fr/docs/Web/Progressive_web_apps/Developer_guide). + +## Documentation + +**<-- La liste automatique temporaire ci-dessous sera bientôt remplacée -->** + +{{LandingPageListSubpages}} + +> **Attention :** ce qui se trouve en dessous de ce point est un reste de l'ancienne version de cette page et sera remanié au fur et à mesure de la révision des autres contenus. + +## Guides de base des PWA + +Les guides suivants vous montrent ce qu'il faut faire pour mettre en œuvre une PWA, en examinant un exemple simple et en vous montrant comment tous les éléments fonctionnent. + +1. [Introduction aux applications web progressives](/fr/docs/Web/Progressive_web_apps/Introduction) +2. [Structure progressive des applications web](/fr/docs/Web/Progressive_web_apps/App_structure) +3. [Faire travailler les VAP en différé avec les travailleurs des services](/fr/docs/Web/Progressive_web_apps/Offline_Service_workers) +4. [Comment rendre les PWA installables](/fr/docs/Web/Progressive_web_apps/Installable_PWAs) +5. [Comment rendre les PWA réengageables en utilisant les notifications et le Push](/fr/docs/Web/Progressive_web_apps/Relancer_Via_Notifications_Push) +6. [Chargement progressif](/fr/docs/Web/Progressive_web_apps/Chargement) +7. [Collection de ressources, de codelabs et d'outils dont vous avez besoin pour construire des PWA par l'équipe de pwafire.org](https://pwafire.org) +8. [Mise en place de votre environnement de développement d'applications web progressives](https://github.com/pwafire/pwadev-tips) + +## Guides technologiques + +- [Stockage côté client](/fr/docs/Apprendre/JavaScript/Client-side_web_APIs/Client-side_storage) – un long guide montrant comment et quand utiliser le stockage web, IndexedDB et les Service Workers. +- [Using service workers](/fr/docs/Web/API/Service_Worker_API/Using_Service_Workers) – un guide plus approfondi couvrant l'API Service Worker. +- [Utilisation d'IndexedDB](/fr/docs/Web/API/API_IndexedDB/Using_IndexedDB) – les principes fondamentaux d'IndexedDB, expliqués en détail. +- [Utilisation de l'API de stockage Web](/fr/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API) – l'API de stockage Web simplifiée. +- [Instant Loading Web Apps with An Application Shell Architecture](https://developers.google.com/web/updates/2015/11/app-shell) – un guide sur l'utilisation du modèle de codage App Shell pour créer des applications qui se chargent rapidement. +- [Utilisation de l'API Push](/fr/docs/Web/API/Push_API/Using_the_Push_API) – apprenez l'essentiel sur l'API Web Push. +- [Utilisation des notifications API](/fr/docs/Web/API/notification/Using_Web_Notifications) – les notifications Web en bref. +- [Les éléments de base du design réactif](/fr/docs/Web/Apps/Modern/Responsive/responsive_design_building_blocks) – apprenez les bases du design réactif, un sujet essentiel pour la mise en page d'une application moderne. +- [Mobile first](/fr/docs/Web/Apps/Modern/Responsive/Mobile_first) – souvent, lors de la création de mises en page d'applications réactives, il est judicieux de créer la mise en page mobile par défaut, et de construire des mises en page plus larges par-dessus. +- [Guide de l'ajout à l'écran d'accueil](/fr/docs/Web/Progressive_web_apps/ajouter_a_lecran_daccueil_a2hs) – découvrez comment vos applications peuvent tirer profit de l'ajout à l'écran d'accueil (A2HS). + +## Outils + +- [localForage](https://localforage.github.io/localForage/) – une belle et simple bibliothèque JavaScript pour rendre le stockage de données côté client vraiment simple ; elle utilise IndexedDB par défaut et revient à Web SQL/Web Storage si nécessaire. +- [ServiceWorkerWare](https://github.com/fxos-components/serviceworkerware) – un _Express-like_ microframe pour faciliter le développement du Service Worker. +- [oghliner](https://github.com/mozilla/oghliner) – il s'agit non seulement d'un modèle, mais aussi d'un outil permettant de déployer des applications Web hors ligne sur des pages GitHub. +- [sw-precache](https://github.com/GoogleChrome/sw-precache) – un module de nœud pour générer un code de travailleur de service qui précache des ressources spécifiques. +- [workbox](https://github.com/GoogleChrome/workbox) – successeur spirituel du sw-precache avec des stratégies de mise en cache plus avancées et un précaching facile. +- [upup](https://www.talater.com/upup/) – un petit script qui assure que votre site est toujours là pour vos utilisateurs. +- [The service worker cookbook](https://serviceworke.rs/) – une série d'excellentes recettes de service worker/push, montrant comment mettre en œuvre une application hors ligne, mais aussi bien plus. +- [WA VS Code extension](https://marketplace.visualstudio.com/items?itemName=mayeedwin.vscode-pwa) – une collection de tous les extraits de code essentiels dont vous avez besoin pour créer des applications Web progressives dans votre environnement VS Code. +- [Apps web progressives](https://developers.google.com/web/progressive-web-apps) sur Google Developers. +- [Applications Web progressives : Échapper aux tabulations sans perdre son âme](https://medium.com/@slightlylate/progressive-apps-escaping-tabs-without-losing-our-soul-3b93a8561955#.6czgj0myh) par Alex Russell. +- [Liste de contrôle des applications Web progressives](https://developers.google.com/web/progressive-web-apps/checklist). +- [L'outil phare](https://developers.google.com/web/tools/lighthouse) par Google. +- [Outils pour créer des applications web progressives avec Angular](https://github.com/angular/mobile-toolkit). +- [Guide PWA React](https://github.com/codebusking/react-pwa-guide-kit). +- [Offline-capable Pokédex web site](https://pokedex.org/). +- [Hacker News readers as Progressive Web Apps](https://hnpwa.com/). +- [Application Web progressive : Les avantages en bref](https://goingmeta.io/dienstleistungen/progressive-web-app/) +- [Pourquoi les applications Web progressives sont l'avenir du Web mobile (recherche 2019)](https://ymedialabs.com/progressive-web-apps). +- [Applications Web progressives : Tout ce que vous devez savoir](https://www.csschopper.com/blog/progressive-web-apps-everything-you-need-to-know/) + +{{QuickLinksWithSubpages("/fr/docs/Web/Progressive_web_apps/")}} diff --git a/files/fr/web/progressive_web_apps/installable_pwas/index.md b/files/fr/web/progressive_web_apps/installable_pwas/index.md index 012aa8ce8c..13caf63663 100644 --- a/files/fr/web/progressive_web_apps/installable_pwas/index.md +++ b/files/fr/web/progressive_web_apps/installable_pwas/index.md @@ -3,40 +3,39 @@ title: Comment rendre les PWAs installables slug: Web/Progressive_web_apps/Installable_PWAs translation_of: Web/Progressive_web_apps/Installable_PWAs --- -
{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}}
+{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}} -

Dans l'article précédent, nous avons vu comment js13kPWA fonctionne en mode déconnecté grâce à son service worker, mais nous pouvons aller encore plus loin et permettre aux utilisateurs d'installer l'application web sur les navigateurs mobiles pris en charge, comme s'il s'agissait d'une application native. Cet article explique comment réaliser ceci en utilisant un manifeste web et une fonctionnalité appelée "ajouter à l'écran d'accueil".

+Dans l'article précédent, nous avons vu comment [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) fonctionne en mode déconnecté grâce à son [service worker](/fr/docs/Web/API/Service_Worker_API), mais nous pouvons aller encore plus loin et permettre aux utilisateurs d'installer l'application web sur les navigateurs mobiles pris en charge, comme s'il s'agissait d'une application native. Cet article explique comment réaliser ceci en utilisant un manifeste web et une fonctionnalité appelée "ajouter à l'écran d'accueil". -

Ces technologies permettent à l'application d'être directement lancée depuis l'écran d'accueil de l'appareil au lieu de lancer manuellement le navigateur puis de saisir l'URL. Votre application web peut se trouver à côté des applications natives en tant qu'application de première catégorie. De ce fait, il est plus facile d'y accéder et vous pouvez également spécifier qu'une application doit s'exécuter en plein écran sans l'encadrement du navigateur hôte, ce qui la fait ressembler encore plus à une application native.

+Ces technologies permettent à l'application d'être directement lancée depuis l'écran d'accueil de l'appareil au lieu de lancer manuellement le navigateur puis de saisir l'URL. Votre application web peut se trouver à côté des applications natives en tant qu'application de première catégorie. De ce fait, il est plus facile d'y accéder et vous pouvez également spécifier qu'une application doit s'exécuter en plein écran sans l'encadrement du navigateur hôte, ce qui la fait ressembler encore plus à une application native. -

Prérequis

+## Prérequis -

Pour rendre un site web installable, il a besoin que les éléments suivants soient mis en place:

+Pour rendre un site web installable, il a besoin que les éléments suivants soient mis en place: - +- Un manifeste web, avec les [bons champs renseignés](/fr/Apps/Progressive/Add_to_home_screen#Manifest) +- Le site web à servir depuis un domaine sécurisé (HTTPS) +- Un icone représentant l'application sur l'appareil +- Un service worker enregistré pour permettre à l'application de fonctionner en mode déconnecté (ceci n'est actuellement imposé que par Chrome pour Android) -

Le fichier manisfeste

+### Le fichier manisfeste -

L'élément clef est un fichier manifeste web qui liste toutes les informations concernant le site web au format JSON.

+L'élément clef est un fichier manifeste web qui liste toutes les informations concernant le site web au format JSON. -

Il se trouve habituellement dans le dossier racine de l'application web. Il contient des informations utiles telles que le nom de l'application, le chemin vers les icones de différentes tailles à utiliser pour représenter l'application sur un système d'exploitation mobile (par exemple, en tant qu'icone sur l'écran d'accueil) et une couleur de fond à utiliser pour les écrans de chargement ou surgissant. Cette information est nécessaire pour que le navigateur puisse présenter correctement l'application lors de l'installation et sur l'écran d'accueil.

+Il se trouve habituellement dans le dossier racine de l'application web. Il contient des informations utiles telles que le nom de l'application, le chemin vers les icones de différentes tailles à utiliser pour représenter l'application sur un système d'exploitation mobile (par exemple, en tant qu'icone sur l'écran d'accueil) et une couleur de fond à utiliser pour les écrans de chargement ou surgissant. Cette information est nécessaire pour que le navigateur puisse présenter correctement l'application lors de l'installation et sur l'écran d'accueil. -

Le fichier js13kpwa.webmanifest de l'application web js13kPWA est inclus dans la section {{htmlelement("head")}} du fichier index.html via la ligne de code suivante:

+Le fichier `js13kpwa.webmanifest` de l'application web [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) est inclus dans la section {{htmlelement("head")}} du fichier `index.html` via la ligne de code suivante: -
<link rel="manifest" href="js13kpwa.webmanifest">
+```html + +``` -
-

Note : Il existe quelques extensions courantes qui ont été utilisées pour les manifestes par le passé: manifest.webapp fut populaire pour les manifestes des applications Firefox OS et nombreux sont ceux qui utilisent manifest.json pour les manifestes web attendu que le contenu est organisé sous forme d'une structure JSON. Cependant, l'extension .webmanifest est explicitement mentionnée dans la W3C relative au manifeste, donc conformons nous à cela.

-
+> **Note :** Il existe quelques extensions courantes qui ont été utilisées pour les manifestes par le passé: `manifest.webapp` fut populaire pour les manifestes des applications Firefox OS et nombreux sont ceux qui utilisent `manifest.json` pour les manifestes web attendu que le contenu est organisé sous forme d'une structure JSON. Cependant, l'extension `.webmanifest` est explicitement mentionnée dans la [W3C relative au manifeste](https://w3c.github.io/manifest/), donc conformons nous à cela. -

Le contenu d'un fichier ressemble à ceci:

+Le contenu d'un fichier ressemble à ceci: -
{
+```json
+{
     "name": "Application Web progressive js13kGames",
     "short_name": "js13kPWA",
     "description": "Application web progressive qui liste les jeux soumis dans la catégorie A-Frame dans la compétition js13kGames 2017.",
@@ -57,61 +56,60 @@ translation_of: Web/Progressive_web_apps/Installable_PWAs
     "display": "fullscreen",
     "theme_color": "#B12A34",
     "background_color": "#B12A34"
-}
+} +``` -

La plupart des champs sont explicites, mais décortiquons le document et expliquons-le en détail:

+La plupart des champs sont explicites, mais décortiquons le document et expliquons-le en détail: - +- `name`: Le nom complet de l'application. +- `short_name`: Nom résumé à afficher sur l'écran d'accueil. +- `description`: Une phrase ou deux expliquant ce que fait l'application. +- `icons`: Un paquet d'informations relatives aux icones — URL sources, tailles et types. Assurez-vous d'en indiquer au moins quelques unes de façon à ce que celle qui est la mieux adaptée soit choisie pour l'appareil de l'utilisateur. +- `start_url`: Le document index document à lancer au démarrage de l'application. +- `display`: Comment l'application est affichée; ce peut être fullscreen, standalone, minimal-ui ou browser. +- `theme_color`: Une couleur primaire pour l'interface utilisateur et qui sera utilisée par le système d'exploitation. +- `background_color`: Une couleur de fond utilisée lors de l'installation et pour l'écran de chargement. -

Le minimum requis pour un manifeste web est le nom (name) et au moins un icone (avec src, size et type). description, short_name et start_url sont recommandés. Il existe même plus de champs que ceux listés ci-dessus et que vous pouvez utiliser — voir la réference du Manifeste des Web Apps pour avoir davatange de détails.

+Le minimum requis pour un manifeste web est le nom (`name`) et au moins un icone (avec `src`, `size` et `type`). `description`, `short_name` et `start_url` sont recommandés. Il existe même plus de champs que ceux listés ci-dessus et que vous pouvez utiliser — voir [la réference du Manifeste des Web Apps](/fr/docs/Web/Manifest) pour avoir davatange de détails. -

Ajout à l'écran d'accueil

+## Ajout à l'écran d'accueil -

"Ajout à l'écran d'accueil" ("Add to home screen" ou a2hs pour faire court) est une fonctionnalité implémentée par les navigateurs mobiles qui récupèrent les informations trouvées dans le manifeste de l'application web et les utilisent pour représenter l'application sur l'écran d'accueil de l'appareil avec un icone et un nom. Ceci ne fonctionne que si l'application s'est conformées à tous les prérequis décrits plus haut.

+"Ajout à l'écran d'accueil" ("Add to home screen" ou a2hs pour faire court) est une fonctionnalité implémentée par les navigateurs mobiles qui récupèrent les informations trouvées dans le manifeste de l'application web et les utilisent pour représenter l'application sur l'écran d'accueil de l'appareil avec un icone et un nom. Ceci ne fonctionne que si l'application s'est conformées à tous les prérequis décrits plus haut. -

Quand l'utilisateur navigue sur la PWA en utilisant un navigateur les prenant en charge, il doit voir s'afficher une banière indiquant qu'il est possible d'installer l'application en tant que PWA.

+Quand l'utilisateur navigue sur la PWA en utilisant un navigateur les prenant en charge, il doit voir s'afficher une banière indiquant qu'il est possible d'installer l'application en tant que PWA. -

Add to Home screen popup of js13kPWA.

+![Add to Home screen popup of js13kPWA.](js13kpwa-icon.png) -

Après que l'utilisateur a cliqué sur cette banière, la banière d'installation est affichée. Cette banière est automatiquement créée par le navigateur en se basant sur les informations contenues dans le fichier manifeste — le nom et l'icone sont visibles dans la boîte de dialogue.

+Après que l'utilisateur a cliqué sur cette banière, la banière d'installation est affichée. Cette banière est automatiquement créée par le navigateur en se basant sur les informations contenues dans le fichier manifeste — le nom et l'icone sont visibles dans la boîte de dialogue. -

Install banner of js13kPWA.

+![Install banner of js13kPWA.](js13kpwa-banner.png) -

Si l'utilisateur clique sur le bouton, il y a une dernière étape montrant à quoi l'application ressemble et permettant à l'utilisateur de confirmer qu'il veut vraiment ajouter l'application.

+Si l'utilisateur clique sur le bouton, il y a une dernière étape montrant à quoi l'application ressemble et permettant à l'utilisateur de confirmer qu'il veut vraiment ajouter l'application. -

Add to Home screen popup of js13kPWA.

+![Add to Home screen popup of js13kPWA.](js13kpwa-add.png) -

Une fois la confirmation donnée, l'application sera installée sur l'écran d'accueil.

+Une fois la confirmation donnée, l'application sera installée sur l'écran d'accueil. -

+![](js13kpwa-installed.png) -

APrès cela, l'utlisateur peut la lancer et commencer à l'utiliser immédiatement. Notez que parfois (selon le navigateur ou le système d'exploitation mobile que vous utilisez) les PWA ont une petite image de navigateur dans le coin inférieur droit de leur icone pour informer l'utilisateur de leur nature web.

+APrès cela, l'utlisateur peut la lancer et commencer à l'utiliser immédiatement. Notez que parfois (selon le navigateur ou le système d'exploitation mobile que vous utilisez) les PWA ont une petite image de navigateur dans le coin inférieur droit de leur icone pour informer l'utilisateur de leur nature web. -

Ecran de démarrage

+### Ecran de démarrage -

Avec certains navigateurs, un écran de démarrage est également généré à partir des informations issues du manifeste et qui est affiché quand la PWA est lancée.

+Avec certains navigateurs, un écran de démarrage est également généré à partir des informations issues du manifeste et qui est affiché quand la PWA est lancée. -

+![](js13kpwa-splash.png) -

L'icone et les couleurs du thème et du fond sont utilisés pour créer cet écran.

+L'icone et les couleurs du thème et du fond sont utilisés pour créer cet écran. -

Résumé

+## Résumé -

Dans cet article, nous avons appris comment nous pouvons rendre une PWA installable en utilisant un manisfeste web et l'écran "Ajouter à l'écran d'accueil".

+Dans cet article, nous avons appris comment nous pouvons rendre une PWA installable en utilisant un manisfeste web et l'écran "Ajouter à l'écran d'accueil". -

Pour plus d'information sur l'écran "Ajout à l'écran d'accueil", reportez-vous au guide d'ajout à l'écran d'accueil. La prise en charge des navigateurs est actuellement limitée à Firefox pour Android 58+, Mobile Chrome et Android Webview 31+ et Opera pour Android 32+, mais ceci doit s'améliorer dans un proche avenir.

+Pour plus d'information sur l'écran "Ajout à l'écran d'accueil", reportez-vous au [guide d'ajout à l'écran d'accueil](/fr/docs/Web/Apps/Progressive/Add_to_home_screen). La prise en charge des navigateurs est actuellement limitée à Firefox pour Android 58+, Mobile Chrome et Android Webview 31+ et Opera pour Android 32+, mais ceci doit s'améliorer dans un proche avenir. -

Maintenant voyons la dernière pièce du puzzle PWA puzzle — ré-engagement via les notifications poussées.

+Maintenant voyons la dernière pièce du puzzle PWA puzzle — ré-engagement via les notifications poussées. -

{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}}

+{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}} -

{{QuickLinksWithSubpages("/en-US/docs/Web/Progressive_web_apps/")}}

+{{QuickLinksWithSubpages("/en-US/docs/Web/Progressive_web_apps/")}} diff --git a/files/fr/web/progressive_web_apps/introduction/index.md b/files/fr/web/progressive_web_apps/introduction/index.md index 894bfc00ff..14d5beeaf6 100644 --- a/files/fr/web/progressive_web_apps/introduction/index.md +++ b/files/fr/web/progressive_web_apps/introduction/index.md @@ -9,88 +9,84 @@ tags: - web manifest translation_of: Web/Progressive_web_apps/Introduction --- -
{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}}
+{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}} -

Cet article fournit une introduction aux Progressive Web Apps (PWA), présentant ce qui les caractérise, et les avantages qu'elles apportent par rapport à de simples applications web.

+Cet article fournit une introduction aux Progressive Web Apps (PWA), présentant ce qui les caractérise, et les avantages qu'elles apportent par rapport à de simples applications web. -

Qu'est-ce qu'une Progressive Web App?

+## Qu'est-ce qu'une Progressive Web App? -

Les PWA sont des applications web développées à l'aide de technologies spécifiques et de standards leur permettant de tirer parti à la fois des fonctionnalités du web et de celles des applications natives.

+Les PWA sont des applications web développées à l'aide de technologies spécifiques et de standards leur permettant de tirer parti à la fois des fonctionnalités du web et de celles des applications natives. -

Par exemple, les applications web sont plus faciles à trouver — c'est beaucoup plus facile et rapide de consulter un site web que d'installer une application, et ces applications web peuvent être partagées grâce à un lien.

+Par exemple, les applications web sont plus faciles à trouver — c'est beaucoup plus facile et rapide de consulter un site web que d'installer une application, et ces applications web peuvent être partagées grâce à un lien. -

Par ailleurs, les applications natives s'intègrent mieux avec le système d'exploitation et offrent souvent une expérience utilisateur plus fluide. Vous pouvez installer une application native afin qu'elle fonctionne hors-ligne, et les utilisateurs préfèrent ouvrir leur applications favorites via les icônes présentent sur leur écran d'accueil de téléphone, plutôt que d'y accéder via leur navigateur.

+Par ailleurs, les applications natives s'intègrent mieux avec le système d'exploitation et offrent souvent une expérience utilisateur plus fluide. Vous pouvez installer une application native afin qu'elle fonctionne hors-ligne, et les utilisateurs préfèrent ouvrir leur applications favorites via les icônes présentent sur leur écran d'accueil de téléphone, plutôt que d'y accéder via leur navigateur. -

Les PWA nous offrent la possibilité de créer des applications web qui bénéficient des mêmes avantages.

+Les PWA nous offrent la possibilité de créer des applications web qui bénéficient des mêmes avantages. -

Ce n'est pas un tout nouveau concept — par le passé, ce type d'idées ont été revues de nombreuses fois sur le web avec des approches différentes. L'amélioration progressive (progressive enhancement) et le responsive design nous permettent déjà de créer des site web plus accessibles sur téléphone. Travailler hors-ligne et installer des applications était possible au sein de l'environnement Firefox OS il y a quelques années.

+Ce n'est pas un tout nouveau concept — par le passé, ce type d'idées ont été revues de nombreuses fois sur le web avec des approches différentes. L'amélioration progressive (_progressive enhancement_) et le _responsive design_ nous permettent déjà de créer des site web plus accessibles sur téléphone. Travailler hors-ligne et installer des applications était possible au sein de l'environnement Firefox OS il y a quelques années. -

Les PWA, cependant, vont encore plus loin, sans pour autant se débarrasser des fonctionnalités qui font la force du web.

+Les PWA, cependant, vont encore plus loin, sans pour autant se débarrasser des fonctionnalités qui font la force du web. -

Qu'est-ce qui caractérise une PWA ?

+## Qu'est-ce qui caractérise une PWA ? -

Comme suggéré plus haut, les PWA ne sont pas créées à l'aide d'une seule technologie. Elles constituent une nouvelle philosophie pour faire des applications web, impliquant certains motifs spécifiques, des API, et d'autres fonctionnalités. De prime abord, ce n'est pas évident de savoir si une application web est une application web progressive. Une application peut être considérée une application web progressive si elle remplit certains critères, ou implémente un ensemble de fonctionnatilés données: fonctionne hors-ligne, est installable, est facile à synchroniser, peut envoyer des notifications push, etc.

+Comme suggéré plus haut, les PWA ne sont pas créées à l'aide d'une seule technologie. Elles constituent une nouvelle philosophie pour faire des applications web, impliquant certains motifs spécifiques, des API, et d'autres fonctionnalités. De prime abord, ce n'est pas évident de savoir si une application web est une application web progressive. Une application peut être considérée une application web progressive si elle remplit certains critères, ou implémente un ensemble de fonctionnatilés données: fonctionne hors-ligne, est installable, est facile à synchroniser, peut envoyer des notifications _push_, etc. -

En complément, il existe des outils pour mesurer le pourcentage de conformité d'une application a être une application web progressive (Lighthouse est actuellement le plus populaire). En implémentant une variété de technologies, nous pouvons rendre une application plus progressive, finissant ainsi avec un score Lighthouse plus élevé. Mais ce n'est qu'un indicateur global.

+En complément, il existe des outils pour mesurer le pourcentage de conformité d'une application a être une application web progressive ([Lighthouse](https://developers.google.com/web/tools/lighthouse/) est actuellement le plus populaire). En implémentant une variété de technologies, nous pouvons rendre une application plus progressive, finissant ainsi avec un score Lighthouse plus élevé. Mais ce n'est qu'un indicateur global. -

Il y a des principes clés qu'une application web devrait suivre afin d'être identifée comme une PWA. Elle doit être:

+Il y a des principes clés qu'une application web devrait suivre afin d'être identifée comme une PWA. Elle doit être: - +- [Discoverable](/fr/docs/Web/Progressive_web_apps/Advantages#Discoverable), afin que le contenu soit trouvé à l'aide de moteurs de recherche. +- [Installable](/fr/docs/Web/Progressive_web_apps/Advantages#Installable), afin d'être disponible sur l'écran d'accueil de l'appareil. +- [Linkable](/fr/docs/Web/Progressive_web_apps/Advantages#Linkable), afin que vous puissiez la partager simplement en envoyant un lien. +- [Network independent](/fr/docs/Web/Progressive_web_apps/Advantages#Network_independent), afin qu'elle fonctionne hors-ligne ou avec une mauvaise connexion internet. +- [Progressive](/fr/docs/Web/Progressive_web_apps/Advantages#Progressive), afin qu'elle soit utilisable sur les plus vieux navigateurs, mais complétement fonctionnelle sur les derniers. +- [Re-engageable](/fr/docs/Web/Progressive_web_apps/Advantages#Re-engageable), afin qu'elle soit capable d'envoyer des notifications lorsque du nouveau contenu est disponible. +- [Responsive](/fr/docs/web/Progressive_web_apps/Advantages#Responsive), afin q'uelle soit fonctionnelle sur n'importe quel appareil et résolution d'écran — téléphones mobiles, tablettes, ordinateurs portables, télévisions, réfrigérateurs, etc. +- [Safe](/fr/docs/web/Progressive_web_apps/Advantages#Safe), afin que le connexion entre vous et l'application soit sécurisée et prévienne n'importe quel tiers d'accéder à vos données. -

Est-ce que ça vaut le coup de faire tout ça ?

+### Est-ce que ça vaut le coup de faire tout ça ? -

Absolument! Avec relativement peu d'effort pour implémenter l'essentiel des fonctionnalités requises par une PWA, les bénéfices sont énormes. Par exemple:

+Absolument! Avec relativement peu d'effort pour implémenter l'essentiel des fonctionnalités requises par une PWA, les bénéfices sont énormes. Par exemple: - +- Une diminution du temps de chargement après avoir installé l'application, et ceci grâce au système de cache des [Service Workers](/fr/docs/Web/API/Service_Worker_API), s'accompagnant aussi par une économie précieuse de bande passante et de temps. +- La possibilité de seulement mettre à jour le contenu qui a changé lorsque qu'une mise à jour d'application est disponible. A contrario, avec une  application native, même la plus petite modification peut obliger l'utilisateur à télécharger entièrement l'application à nouveau. +- Une sensation d'utilisation et une apparence plus proche d'une application native— icônes d'applications sur l'écran d'accueil, des applications qui s'ouvrent en plein écran, etc. +- Les utilisateurs sont plus engagés grâce à un système de notifications et de messages _push_, créant des utlisateurs plus impliqués apportant des taux de conversion plus élevés. -

Il y a de nombreuses histoires à succès à propos d'entreprises ayant essayé les PWA, optant pour une expérience web enrichie plutôt qu'une application, et constatant des bénéfices significatifs et mesurables. Le site web PWA Stats partage de nombreux cas d'études qui démontrent ces bénéfices.

+Il y a de nombreuses histoires à succès à propos d'entreprises ayant essayé les PWA, optant pour une expérience web enrichie plutôt qu'une application, et constatant des bénéfices significatifs et mesurables. Le site web [PWA Stats](https://www.pwastats.com/) partage de nombreux cas d'études qui démontrent ces bénéfices. -

L'histoire la plus connue est sans doute celle de Flipkart Lite — le plus large site e-commerce indien redéveloppé en PWA en 2015, ce qui a conduit à 70% d'augmentation en conversions. La PWA AliExpress a aussi constaté de bien meilleurs résultats que le web ou l'application native, avec une augmentation de 104% en terme de taux de conversions pour les nouveaux utilisateurs. Au vu de ces augmentations de profit, et la charge relativement faible de travail requis pour convertir une application en PWA, l'avantage est évident.

+L'histoire la plus connue est sans doute celle de [Flipkart Lite](https://stories.flipkart.com/introducing-flipkart-lite/) — le plus large site e-commerce indien redéveloppé en PWA en 2015, ce qui a conduit à 70% d'augmentation en conversions. La PWA [AliExpress](https://m.aliexpress.com/) a aussi constaté de bien meilleurs résultats que le web ou l'application native, avec une augmentation de 104% en terme de taux de conversions pour les nouveaux utilisateurs. Au vu de ces augmentations de profit, et la charge relativement faible de travail requis pour convertir une application en PWA, l'avantage est évident. -

Des start-up émergeantes comme couponmoto ont aussi commencé à utiliser des applications web progressives pour améliorer l'engagement des consommateurs, démontrant qu'elles peuvent aider les petites entreprises autant que les grosses à fidéliser les utilisateurs plus efficacement.

+Des start-up émergeantes comme [couponmoto](https://www.couponmoto.com/) ont aussi commencé à utiliser des applications web progressives pour améliorer l'engagement des consommateurs, démontrant qu'elles peuvent aider les petites entreprises autant que les grosses à fidéliser les utilisateurs plus efficacement. -

Vous pouvez consulter la liste sur pwa.rocks pour plus d'exemples. Une page particulièrement intéressante à mentionner est celle de hnpwa.com — elle liste un exemple d'implémentation du site web Hacker News (au lieu du TodoMVC app classique), dans lequel vous pouvez voir l'utilisation de plusieurs frameworks front-end.

+Vous pouvez consulter la liste sur [pwa.rocks](https://pwa.rocks/) pour plus d'exemples. Une page particulièrement intéressante à mentionner est celle de [hnpwa.com](https://hnpwa.com/) — elle liste un exemple d'implémentation du site web Hacker News (au lieu du TodoMVC app classique), dans lequel vous pouvez voir l'utilisation de plusieurs _frameworks_ front-end. -

Vous pouvez même générer des PWA en ligne à l'aide du site web PWABuilder.

+Vous pouvez même générer des PWA en ligne à l'aide du site web [PWABuilder](https://www.pwabuilder.com/). -

Pour les informations spécifiques aux service workers et aux notifications push, consultez le Service Worker Cookbook, une collection d'exemples utilisant des service workers.

+Pour les informations spécifiques aux _service workers_ et aux notifications _push_, consultez le [Service Worker Cookbook](https://serviceworke.rs/), une collection d'exemples utilisant des _service workers_. -

Ça vaut le coup d'essayer l'approche PWA, afin que vous puissiez constater par vous-même si ça convient à votre application.

+Ça vaut le coup d'essayer l'approche PWA, afin que vous puissiez constater par vous-même si ça convient à votre application. -

Compatibilité navigateur

+## Compatibilité navigateur -

Comme expliqué précédemment, les PWA ne reposent pas sur une seule API, mais plutôt sur plusieurs technologies pour atteindre l'objectif de délivrer la meilleure expérience web possible.

+Comme expliqué précédemment, les PWA ne reposent pas sur une seule API, mais plutôt sur plusieurs technologies pour atteindre l'objectif de délivrer la meilleure expérience web possible. -

L'ingrédient clé requis pour les PWA est le support des service worker. Heureusement les service workers sont désormais supportés sur tous les principaux navigateurs, sur ordinateur et sur téléphone mobile.

+L'ingrédient clé requis pour les PWA est le support des [service worker](/fr/docs/Web/API/Service_Worker_API). Heureusement les _service workers_ sont [désormais supportés sur tous les principaux navigateurs](https://jakearchibald.github.io/isserviceworkerready/), sur ordinateur et sur téléphone mobile. -

D'autres fonctionnalités telles que Web App Manifest, Push, Notifications, et Add to Home Screen bénéficient également d'un large support. Juqu'à présent Safari a limité le support du Web App Manifest et Add to Home Screen, et ne supporte pas les notifications web push. Cependant, les principaux autres navigateurs supportent toutes ces fonctionnalités.

+D'autres fonctionnalités telles que [Web App Manifest](/fr/docs/Web/Manifest), [Push](/fr/docs/Web/API/Push_API), [Notifications](/fr/docs/Web/API/Notifications_API), et [Add to Home Screen](/fr/docs/Web/Progressive_web_apps/Add_to_home_screen) bénéficient également d'un large support. Juqu'à présent Safari a limité le support du _Web App Manifest_ et _Add to Home Screen_, et ne supporte pas les notifications web _push_. Cependant, les principaux autres navigateurs supportent toutes ces fonctionnalités. -

Certaines de ces API sont expérimentales, et accompagnées d'une documenation toujours à l'état de brouillon, mais les histoires à succès comme celles de Flibkart et AliExpress devraient d'ores et déjà suffire à vous convaincre d'essayer et d'implémenter certaines de ces fonctionnalités dans votre application web.

+Certaines de ces API sont expérimentales, et accompagnées d'une documenation toujours à l'état de brouillon, mais les histoires à succès comme celles de Flibkart et AliExpress devraient d'ores et déjà suffire à vous convaincre d'essayer et d'implémenter certaines de ces fonctionnalités dans votre application web. -

Par dessus tout, vous devriez suivre la régle d'amélioration progressive — utilisez les technologies qui fournissent ces améliorations seulement où elles sont supportées, mais proposez quand même les fonctionnalités basiques de votre application lorsqu'elles ne le sont pas. De cette façon, tout le monde sera en mesure de l'utiliser, mais ceux aqui ont un navigateur récent bénéficieront de toutes les fonctionnalités offertes par les PWA et même plus.

+Par dessus tout, vous devriez suivre la régle d'amélioration progressive — utilisez les technologies qui fournissent ces améliorations seulement où elles sont supportées, mais proposez quand même les fonctionnalités basiques de votre application lorsqu'elles ne le sont pas. De cette façon, tout le monde sera en mesure de l'utiliser, mais ceux aqui ont un navigateur récent bénéficieront de toutes les fonctionnalités offertes par les PWA et même plus. -

Un exemple d'application

+## Un exemple d'application -

Dans cette série d'articles nous examinerons le code source d'un site web simple qui propose des informations à propos de jeux soumis à A-Frame category lors de la compétition js13kGames 2017. Ne vous souciez pas du contenu réel du site — le plus important est d'apprendre à utiliser les fonctionnalités des PWA dans vos propres projets.

+Dans cette série d'articles nous examinerons le code source d'un site web simple qui propose des informations à propos de jeux soumis à [A-Frame category](http://js13kgames.com/aframe) lors de la compétition [js13kGames 2017](http://2017.js13kgames.com/). Ne vous souciez pas du contenu réel du site — le plus important est d'apprendre à utiliser les fonctionnalités des PWA dans vos propres projets. -

Vous pouvez trouver la version en ligne sur mdn.github.io/pwa-examples/js13kpwa (et le code source), que l'on va expliquer avec attention dans les prochains articles.

+Vous pouvez trouver la version en ligne sur [mdn.github.io/pwa-examples/js13kpwa](https://mdn.github.io/pwa-examples/js13kpwa/) (et [le code source](https://github.com/mdn/pwa-examples/tree/master/js13kpwa)), que l'on va expliquer avec attention dans les prochains articles. -

Maintenant, allons à la deuxième partie de cette série, dans laquelle on s'intéressera à la structure de notre application démo.

+Maintenant, allons à la deuxième partie de cette série, dans laquelle on s'intéressera à la structure de notre application démo. -

{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}}

+{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}} -
{{QuickLinksWithSubpages("/en-US/docs/Web/Progressive_web_apps/")}}
+{{QuickLinksWithSubpages("/en-US/docs/Web/Progressive_web_apps/")}} diff --git a/files/fr/web/progressive_web_apps/loading/index.md b/files/fr/web/progressive_web_apps/loading/index.md index e1394252c4..e853b74a33 100644 --- a/files/fr/web/progressive_web_apps/loading/index.md +++ b/files/fr/web/progressive_web_apps/loading/index.md @@ -6,147 +6,158 @@ tags: translation_of: Web/Progressive_web_apps/Loading original_slug: Web/Progressive_web_apps/Chargement --- -
{{PreviousMenu("Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Web/Progressive_web_apps")}}
+{{PreviousMenu("Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Web/Progressive_web_apps")}} -

Dans les articles précédents, nous avons abordé les APIs qui nous aident à faire de notre exemple js13kPWA une Progressive Web App: Service Workers, Manifestes Web, Notifications et Push. Dans cet article, nous irons encore plus loin et améliorerons la performance de l'application en téléchargeant progessivement ses ressources.

+Dans les articles précédents, nous avons abordé les APIs qui nous aident à faire de notre exemple [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) une Progressive Web App: [Service Workers](en-US/docs/Web/Progressive_web_apps/Offline_Service_workers), [Manifestes Web](/fr/docs/Web/Progressive_web_apps/Installable_PWAs), [Notifications et Push](/fr/docs/Web/Progressive_web_apps/Re-engageable_Notifications_Push). Dans cet article, nous irons encore plus loin et améliorerons la performance de l'application en téléchargeant progessivement ses ressources. -

Première visualisation signifiante

+## Première visualisation signifiante -

Il est important de fournir quelque chose qui ait du sens pour l'utilisateur dès que possible  — plus il attend que la page se charge, plus il y a de chances qu'il s'en aille plutôt que d'attendre que tout soit fini. Nous devrions être capable de lui montrer au moins une vue basique de la page qu'il veut voir avec des emplacements où du contenu supplémentaire sera chargé à un moment donné.

+Il est important de fournir quelque chose qui ait du sens pour l'utilisateur dès que possible  — plus il attend que la page se charge, plus il y a de chances qu'il s'en aille plutôt que d'attendre que tout soit fini. Nous devrions être capable de lui montrer au moins une vue basique de la page qu'il veut voir avec des emplacements où du contenu supplémentaire sera chargé à un moment donné. -

Ceci peut être réalisé grâce au chargement progressif — également appelé Lazy loading. Tout ceci consiste en retardant autant que possible le plus de ressources que possible (HTML, CSS, JavaScript), et ne charger immédiatement que celles qui sont réellement nécessaire pour la toute première expérience.

+Ceci peut être réalisé grâce au chargement progressif — également appelé [Lazy loading](https://en.wikipedia.org/wiki/Lazy_loading). Tout ceci consiste en retardant autant que possible le plus de ressources que possible (HTML, CSS, JavaScript), et ne charger immédiatement que celles qui sont réellement nécessaire pour la toute première expérience. -

Mise en paquet versus éclatement

+## Mise en paquet versus éclatement -

De nombreux visiteurs ne naviguerons pas sur la totalité des pages d'un site web bien que l'approche habituelle consiste à mettre dans un paquet toutes les fonctionnalités que nous avons dans un seul gros fichier. Un fichier bundle.js peut peser plusieurs megaoctets et un unique paquet style.css peut tout contenir, depuis les définitions de base des structures CSS à tous les styles possibles de toutes les versions d'un site: mobile, tablette, ordinateur de bureau, pour l'impression, etc.

+De nombreux visiteurs ne naviguerons pas sur la totalité des pages d'un site web bien que l'approche habituelle consiste à mettre dans un paquet toutes les fonctionnalités que nous avons dans un seul gros fichier. Un fichier `bundle.js` peut peser plusieurs megaoctets et un unique paquet `style.css` peut tout contenir, depuis les définitions de base des structures CSS à tous les styles possibles de toutes les versions d'un site: mobile, tablette, ordinateur de bureau, pour l'impression, etc. -

Il est plus rapide de télécharger toutes les informations sous la forme d'un unique fichier plutôt que beaucoup de petits, mais si l'utilisateur n'a pas besoin de tout au tout début, nous pourrions ne télécharger que ce qui est crucial puis gérer les autres ressources quand elles sont nécessaires.

+Il est plus rapide de télécharger toutes les informations sous la forme d'un unique fichier plutôt que beaucoup de petits, mais si l'utilisateur n'a pas besoin de tout au tout début, nous pourrions ne télécharger que ce qui est crucial puis gérer les autres ressources quand elles sont nécessaires. -

Render-blocking resources

+## Render-blocking resources -

Créer des paquets est un problème car le navigateur doit charger le HTML, le CSS et le JavaScript avant qu'il ne puisse afficher le rendu du résultat à l'écran. Pendant les quelques secondes séparant l'accès l'initial au site web et la fin du téléchargement, l'utilisateur voit une page blanche ce qui est une mauvaise expérience.

+Créer des paquets est un problème car le navigateur doit charger le HTML, le CSS et le JavaScript avant qu'il ne puisse afficher le rendu du résultat à l'écran. Pendant les quelques secondes séparant l'accès l'initial au site web et la fin du téléchargement, l'utilisateur voit une page blanche ce qui est une mauvaise expérience. -

Pour corriger ça, nous pouvons, par exemple, ajouter defer aux fichiers JavaScript:

+Pour corriger ça, nous pouvons, par exemple, ajouter `defer` aux fichiers JavaScript: -
<script src="app.js" defer></script>
-
+```html + +``` -

Ils seront téléchargés et exécutés après que le document lui-même a été analys"si bien qu'il ne bloquera pas le rendu de la structure HTML. Nous pouvons également éclater les fichiers css et leur ajouter des types de media:

+Ils seront téléchargés et exécutés _après_ que le document lui-même a été analys"si bien qu'il ne bloquera pas le rendu de la structure HTML. Nous pouvons également éclater les fichiers css et leur ajouter des types de media: -
<link rel="stylesheet" href="style.css">
-<link rel="stylesheet" href="print.css" media="print">
-
+```html + + +``` -

Ceci indiquera le navigateur de ne les télécharger que si la condition est remplie.

+Ceci indiquera le navigateur de ne les télécharger que si la condition est remplie. -

Dans notre application de démonstration js13kPWA, le CSS est suffisamment simple pour tout laisser dans un seul fichier sans règle spécifique sur la façon de les charger. Nous pourrions même aller plus loin et déplacer tout ce qui se trouve dans style.css dans la balise <style> dans le <head> de index.html — ceci améliorerait encore plus la performance mais pour la lisibilité de l'exemple, nous nous passerons aussi de cette approche.

+Dans notre application de démonstration js13kPWA, le CSS est suffisamment simple pour tout laisser dans un seul fichier sans règle spécifique sur la façon de les charger. Nous pourrions même aller plus loin et déplacer tout ce qui se trouve dans `style.css` dans la balise `