PWA, la technologie des applications web progressives

Les Progressive Web App sont conçues pour apparaître comme des applications locales, bien que fournies en ligne.

En novembre 2017, Google a annoncé la fin des applications Chrome (Chrome Apps) et la fermeture de la Chrome Store, la boutique qui permettait de les télécharger.

PWA

Ce type d'application est devenu non pertinent et trop peu utilisé, dit Google, et doit laisser la places aux PWA, qui fournissent une expérience identique à l'utilisateur et qui ont l'avantage de fonctionner sur tous les navigateurs récents en utilisant les nouvelles technologies du web.

Le sens du terme "progressif" dans PWA est assez vague et se réfère au progrès apporté par des applications fonctionnant sur tout ordinateur ou mobile. Les PWA ont en fait des caractéristiques plus précises:

Les technologies

Pour qu'une application web soit similaire à une application locale, elle doit surtout être réactive, sans latence, ce qui est permis par une série de nouveaux outils.

WebAssembly

Ce nouveau langage de type bytecode permet d'ajouter des API à JavaScript, disponibles dans le navigateur et qui sont générées à partir de C, C++ ou autres langages. Leur vitesse d'exécution est proche de celle du code binaire.

IndexedDB

Une base de donnée peut-être créée sur le poste client avec IndexedDB. Elle est accessible uniquement par l'application qui la crée. Elle peut copier les données d'une base sur le serveur (mais on doit passer au format clé/valeur). Elle peut aussi contenir du code wasm ou JS qui restera stocké en permanence sur le poste client (pour cette seule application) et n'aura plus à être chargé à chaque nouvelle session.

Web Workers

On peut exécuter des scripts en tâche de fond, de façon asynchrone, dans un Web Worker. Un moyen de rendre l'application plus fluide. Il communique avec la page par postMessage.

Service Workers

C'est une sorte de Web Worker dédié aux interactions entre le serveur et l'application. Comme le précédent, il fonctionne de façon asynchrone et invisible, utilise l'interface postMessage. C'est un proxy à tout ce qui vient du serveur: il intercepte ce qui est communiqué, le transmet à la page qui l'utilise au moment opportun.

Manifeste et mode offline

La balise HTML dispose de l'attribut manifest pour décrire une application progressive. Le fichier indiqué par cet attribut contenait auparavant une liste de ressource à mettre en cache sur le poste client pour l'utilisation hors ligne. On utilisait cette ligne:

<html manifest="monapplication.appcache">

Les ressources étaient mise en "cache" (mémoire-tampon) sur le poste client, d'où l'extension appcache mais on peut utiliser tout autre extension. Mais cela est maintenant obsolète car on obtient le même résultat avec IndexedDB et Service Worker.

Dorénavant, l'attribut manifest donne le lien sur un fichier descriptif pour que l'application soit plus facilement utilisable par tout programme d'installation, ou autre. Sa déclaration à la forme suivante:

<html manifest="monapplication.manifest">

Le fichier ainsi lié à un format basé sur JSON défini pour ce faire par le W3C. Il comporte les indications suivantes.

Exemples de PWA