Clever Age - Conseil en architecture technique


oct 08 16

gears

Google Gears

Gears (anciennement appelé Google Gears) est une extension du navigateur Web permettant non seulement de faire tourner des applications Web sans être connecté mais également de synchroniser les modifications.

Gears logo

Fiche d’identité
Nom du produitGears
AuteurGoogle via Google Code
Date de sortie de la première version 0.1 - Mai 2007
Numéro de la version étudiée0.4 - Aôut 2008
LicenceBSD
Navigateurs compatiblesApple Mac OS X, Linux, Windows XP et + : Firefox 1.5 et + / Windows XP et + : Internet Explorer 6.0 et + / Windows Mobile 5 et + : Internet Explorer 4.01 et + / Google Chrome

Synthèse

Gears (anciennement appelé Google Gears) est une extension du navigateur qui permet aux développeurs de créer des applications Web pouvant fonctionner sans être connecté.

Diffusée sous licence BSD, cette extension est Open Source et au stade de développement (0.4). La documentation est relativement complète et de nombreux tutoriels sont disponibles ainsi qu’une communauté déjà fournie.

Gears s’appuie sur Dojo Offline Toolkit, projet open source qui permet également de créer des applications Web fonctionnant hors connexion.

Cette extension permet notamment de synchroniser les modifications apportées hors connexion.

Analyse

Principe

Gears permet de régler un des problèmes majeurs des applications Web, la nécessité d’être constamment connecté. En effet, il transforme le navigateur en solution client-serveur locale, rendant ainsi possible la manipulation de contenu hors connexion. Une fois connecté, une simple synchronisation avec le serveur concerné met à jour les différents contenus modifiés.

google gears server

API

Gears est un applicatif qui installe une extension au navigateur Web en lui rajoutant une API Javascript comprenant 3 fonctionnalités majeures :

  • Database : base de données SQLite intégré dans le navigateur qui permet de créer localement des bases de données et d’effectuer les fonctionnalités SQL de base (requêtes Select/Insert/Update/Delete, transactions...) grâce à l’appel de fonctions Javascripts.

Ce composant stocke localement et ce jusqu’à suppression du fichier de sauvegarde, toutes les données modifiées par l’utilisateur. On peut alors envisager d’utiliser cette base de données intégrée au navigateur pour stocker d’autres informations, comme les préférences de l’utilisateur par exemple.

  • LocalServer : permet de stocker en cache toutes les ressources de la page (HTML, images, CSS, JS…).

Ce composant paramétré par l’application Web gère l’accès aux ressources et intercepte les URLs passées au navigateur pour les servir localement lorsqu’il n’y a pas de connexion.

  • WorkerPool : permet d’exécuter du code JavaScript en arrière-plan sans bloquer l’exécution de la page principale.

Ce composant a pour vocation d’assurer la communication entre les deux premiers composants et permettre la mise à jour des données une fois reconnecté. Son mode de fonctionnement en tâche de fond est un atout majeur pour l’amélioration des performances de l’application Web.

Gears a de plus implémenté les fonctionnalités suivantes :

  • HTTPRequest : implémente un objet basé sur XMLHttpRequest non disponible hors connexion, reprenant la majorité des fonctionnalités à l’exception de la possibilité de manipuler la réponse du navigateur comme un objet DOM XML et d’envoyer des requêtes de façon synchrones.
  • Timer : reprend les fonctionnalités du Timer standard de l’objet Window permettant ainsi au WorkerPool qui ne peut accéder à l’objet widnow, de disposer de cette fonctionnalité.
  • Desktop : fournit une interface permettant d’utiliser des fonctionnalités du Bureau comme par exemple la création de raccourcis
  • Geolocalisation : permet de connaitre la position géographique d’un utilisateur
  • Blob : implémente un nouvel objet immuable (autrement dit non modifiable) permettant de manipuler directement les fichiers.

Fonctionnement

Gears dispose de 2 modes de fonctionnement, Modal et Modeless.

  • Le premier, Modal, fonctionne de la façon suivante : si on est connecté, on travaille avec le serveur en ligne sinon, on travaille avec le serveur local.

Ce système met de plus l’utilisateur à contribution dans le sens où c’est lui qui décide quand il veut travailler hors connexion.

Ce type de fonctionnement a cependant quelques inconvénients notamment dans le cas de coupures régulières (dans un train ou un avion par exemple) car l’utilisateur doit jongler entre le mode connecté/déconnecté.

Google Reader est un bon exemple d’application Web fonctionnant de cette manière. En résumé, Google Readers est une application qui concentre au même endroits tous les Flux RSS auxquels vous êtes abonnés et permet leur lecture. L’intégration de Gears permet désormais de consulter et lire toutes les informations issues des Flux RSS sans être connecté. Cela peut s’avérer pratique si l’on est dans un train par exemple, le mode déconnecté fait alors gagner du temps.

  • Le second, Modeless, part quant à lui du principe qu’on travaille constamment hors connexion, et effectue de manière régulière des synchronisations avec le serveur en ligne (si celui ci est accessible et disponible) afin de mettre à jour les contenus modifiés.

Ce type de fonctionnement a l’avantage d’apporter un certain confort à l’utilisateur dans le sens où celui ci n’a pas à se préoccuper de sa connexion mais est plus difficile à implémenter pour le développeur.

Remember the milk est un bon exemple d’application Web fonctionnant de cette manière. Pour résumer, cette application permet notamment de réaliser une liste de tâches consultable en ligne. L’intégration de Gears permet désormais de modifier cette liste de tâches sans devoir se préoccuper de l’état de sa connexion, l’application réalisant de manière automatique des synchronisations avec le serveur afin de mettre les nouvelles tâches en ligne.

Mise en place

La mise en place de Gears se décompose en plusieurs étapes :

  • installation de l’extension
  • création d’un manifeste
  • intégration du fichier Javascript gears_init.js d’initialisation
  • mise en place d’un fichier Javascript contenant les fonctions nécessaires au bon fonctionnement de l’application Web hors connexion

L’extension Gears s’installe simplement par le biais d’un executable disponible sur le site dédié.

Le manifeste quant à lui consiste en un fichier au format JSON, manifest.json listant toutes les ressources (HTML, images, CSS, JS...) à mettre en cache hors connexion permettant le bon fonctionnement de l’application Web :


{
 "betaManifestVersion": 1,
 "version": "ma_version_1",
 "entries": [
     { "url": "ma_page.html"},
     { "url": "ma_page.js"},
     { "url": "ma_page.css"},
     { "url": "ma_page.png"},
     { "url": "gears_init.js"}
   ]
}

Le fichier gears_init.js contenant la procédure d’initialisation de l’applicatif, il doit obligatoirement figurer dans le manifeste.

Il est à noter, que la création de ce manifeste peut vite devenir laborieux pour le développeur. Si on se place par exemple dans la situation d’une page créer dynamiquement, ma_page.html ?p=3&a=4, il est absolument primordiale de la lister dans le manifeste :


...
     { "url": "ma_page.html"},
     { "url": "ma_page.html?p=3&a=4"},
...

En prenant en compte le nombre de possibilités pour une même page, on se rend vite compte de l’ampleur de la tâche. Au développeur de trouver le moyen de recenser toutes les ressources lors de la création de ce manifeste.

Enfin, la dernière étape consiste en la mise en place dans un fichier Javascript, ici ma_page.js, des fonctions qui se chargeront en autre de :

  • initialiser Gears
  • mettre en cache les ressources déclarées dans le manifeste
  • reproduire les fonctionnalités de l’application Web (soumission de formulaires, redirection d’URL, requêtes SQL...)
  • nettoyer le cache
  • synchroniser les données avec le serveur lors du passage connecté/déconnecté

Faiblesses

Gears ne dispose pas de certains mécanismes primordiaux comme par exemple la détection de l’état de la connexion ou encore la synchronisation automatique. C’est au développeur d’implémenter toute la logique de ces mécanismes pour rendre l’application Web fonctionnelle.

Si la détection de l’état de la connexion n’est pas trop contraignante, surtout par le biais de navigator.online fournit par Firefox et Internet Explorer, ce n’est pas forcément le cas pour la mise en place de la synchronisation avec le serveur permettant de renvoyer les modifications apportées hors connexion.

Contribution

Une mailing-list ainsi qu’un wiki sont disponibles pour contribuer au projet Gears.

Utilisation

Liste non exhaustive d’applications Web utilisant Gears :

Perspectives

Gears n’est encore qu’au stade de développement mais semble très prometteur comme le montre les nombreuses applications qui en font déjà l’utilisation. Concrètement, il est de plus en plus envisageable que dans un avenir proche, on puisse utiliser Gmail ou encore Google Calendar sans être forcément connecté.

En attendant, on peut toujours jeter un oeil sur les futures applications de type RIA (Rich Internet Application) intégrant complètement Gears dans leur système comme Google Widget Toolkit, le framework de développement Java de Google.

Récapitulatif

ForcesFaiblesses
- Possibilité de travailler hors connexion - Pratiquement tout est à implémenter par le développeur
- Synchronisation des modifications
- Stockage des données localement
OpportunitésMenaces
- Soutien d’Adobe, Mozilla et Opéra - Evolution du projet lié à priori à celui de Dojo Offline Toolkit
- Apport de la communauté - Concurrence avec Microsoft et son Microsoft Sync Framework
- Initiative indépendante, potentiellement concurrente du Structured Client Side Storage de HTML5