dimanche, novembre 5

Soyez cool, soyez offline...

Comme évoqué dans mon post précédent, le moment où le web 2.0 va se débarasser de son dernier gros problème technique (l'absence de mode offline) ne m'a jamais semblé aussi proche. L'arrivée de Scrybe et l'hypothétique apparition de Google Docs en mode déconnecté confirment cela tout autant que la grosse activité de Dojo sur le sujet.

Les méthodes comme c'est souvent le cas dans le web existent depuis un petit moment, j'en distinguerai néanmoins plusieurs familles en fonction des réponses aux questions suivantes :

  1. A-t-on besoin d'installer quelque chose pour faire fonctionner l'application en mode offline ?
  2. Un plug-in navigateur est-il nécessaire ?
  3. Sur quels navigateurs peut-on faire fonctionner l'application ?

1- La solution "installation sur poste client"
Tout ce qui peut être pénible pour le web offline trouve une solution immédiate avec une installation côté client :
- les données sont librement stockées côté client
- il reste possible de faire fonctionner du "code serveur" en mode déconnecté

Du côté des moins : il faut installer quelque chose sur le poste client avec tous les problèmes que ça peut entraîner (portabilité, installation/réinstallation, maintenance...). Ce qu'on gagne en richesse, on le perd en légereté du client.

Pour ceux que cela intéresse, je conseille de regarder vers Lighttpd pour un serveur web embarqué léger et efficace et du côté de SQLite pour la même chose du point de vue des bases de données.


2- La solution "plug-in"
Cela consiste cette fois à utiliser Flash ou Java pour stocker des informations côté client. Java permet cela à condition d'utiliser des applets signées (et que les utilisateurs fassent confiance à votre certificat). Pour ce qui est de Flash, il est nécessaire d'utiliser les Local Shared Objects (LSO) qui constituent des sortes de "FlashCookies"... et fait extrêmement intéressant, la librairie Dojo permet désormais d'y accéder facilement via Javascript.

La solution Flash semble être meilleure que Java (pas de certificat à faire accepter par l'utilisateur), le seul problème étant la nécessité pour le client d'avoir le plug-in approprié (96% des lecteurs de ce blog ont Flash, 98% ont Java).


3- La solution "100% navigateur web"
C'est une solution conceptuellement très séduisante. En quoi consiste-t-elle ? Il s'agit de tirer au mieux parti des caractéristiques installées de la machine cliente : au final, une petite couche d'abstraction cachera au développeur Javascript la complexité du stockage local.
Que fera cette couche d'abstraction ? Elle va regarder les différentes stratégies de stockage local qui s'offrent à elle :
- les lso Flash
- le stockage local de Firefox 2
- le mécanisme de stockage local d'Internet Explorer
- les cookies
- tout autre solution de stockage local plus ou moins bizaroïde disponible sur toutes sortes de configurations plus ou moins obscures

... et en fonction de la configuration cliente rencontrée, elle choisira la plus adaptée.
Dans l'ordre, le choix le plus pertinent me semble être : stockage firefox 2, sinon stockage lso Flash, sinon stockage IE, sinon cookies.

Il faudrait regarder d'un peu plus près les statistiques des configurations clientes rencontrées, mais je pense que les machines n'ayant ni Flash, ni Firefox 2, ni Internet Explorer et ses contrôles ActiveX représentent moins de 1% des configurations (2% sur ce blog) : cette solution paraît donc viable dès maintenant.
Où trouver la fameuse couche d'abstraction ? Chez nos amis de Dojo, bien sûr... ils n'ont malheureusment implémenté pour le moment que le driver Flash : étant donné que c'était aussi le plus difficile à mettre en place, on peut espérer que la suite vienne prochainement.

Pour info, savez-vous quelle société est le plus gros soutien de Dojo ? Non ? C'est tout simplement Jotspot, récemment racheté par Gooooooogle... Je vous laisse méditer là-dessus et me laisser un commentaire si vous voulez que je développe tout ça (un tutoriel ?) dans un prochain post.


Edit : contrairement à ce que j'ai écrit précédemment, l'objet ActiveX FSO n'est pas une bonne solution pour le stockage local (voir les commentaires).

7 commentaires:

gigigan a dit…

Intéressant, et je suis assez pour le petit tutoriel qui expliquerai tout ça en exemple.
Quand à un google Docs en déconnecté j'en rêve !

Anonyme a dit…

oh oui oh oui un tutorial en direct de troyes dans l'aube.

sur quoi ? sur dojo? sur le stockage persistant?

Brad Neuberg
“Beyond Cookies: dojo.storage”
http://codinginparadise.org/talks/ajax_experience_sf_2006/ajax_experience_2006.pdf

JB Boisseau a dit…

Oh, un fan de Troyes dans l'Aube et Brad Neuberg ! Moi qui pensais être le seul !
Le petit tutoriel montrerait plusieurs moyens de stocker des données sur le poste client :
- en utilisant dojo et les excellentes méthodes de Brad (et Alex Russel)
- en utilisant le mécanisme intégré à Firefox 2

Alors intéressé ? Sinon, je peux vous proposer un "survivor's guide to Troyes", mais j'ai l'impression qu'il y a moins de demandes...

Anonyme a dit…

Plutôt en utilisant dojo et les excellentes méthodes de Brad (et Alex Russel)

Les expériences browser spécifiques ne sont que des expériences ...

JB Boisseau a dit…

"Les expériences browser spécifiques ne sont que des expériences"

Pas tout à fait d'accord... dans le cadre d'un intranet où le périmètre est bien défini par exemple, il est possible d'imposer un navigateur (surtout quand celui-ci est multi-OS) : c'est un cas que j'ai déjà rencontré.

Diagg a dit…

Salut JP, je dit peut etre une bétise (je n'ai que quelques semaine de javascript derriere moi!) mais il me semble que dans IE, le FSO il marche qu'en lecture sinon sa s'appel une faille de sécurité... mais si t'as un tuto la dessu aussi : je prends !

JB Boisseau a dit…

Merci pour intervention Diagg !

D'après la doc Microsoft, le FSO marche en lecture et en écriture... mais pas avec la sécurité par défaut d'IE6 (en effet, il serait dommage de se faire effacer son disque dur par un malheureux Javascript) !

Donc FSO n'est pas une bonne solution, en effet.

Par contre IE dispose d'un mécanisme de stockage local d'une capacité de 60 ko qui pourrait être utilisé pour résoudre notre problème.