La Fondation Mozilla a sorti localForage, une nouvelle bibliothèque JavaScript qui permet de simplifier le processus de stockage hors ligne de données dans des applications web.
Bien que ce ne soit pas une technologie récente, le support de mode hors ligne a toujours été trop fragmenté à cause du trop grand nombre de choix disponibles. Ce qui rend cette librairie unique est qu'elle essaye de combiner le meilleur de chaque monde : les fonctionnalités issues des technologies les plus récentes (asynchrone et support des blobs) avec une API simpliste. Ceci permet de proposer des modes hors ligne puissants aux applications web, les rendant plus proches des applications mobiles et plus intuitives pour les développeurs.
Un des premiers choix disponibles était localStorage qui fournit une méthode simple pour accéder à du stockage hors ligne. Cependant, les tests ont montré qu'il était lent, synchrone et ne supportait pas les blobs (par exemple, pas de cache de fichier mp3 possible). Depuis, deux autres choix ont émergé, IndexedDB et Web SQL qui sont asynchrones, rapides et supportent un nombre important de types de données. L'inconvénient de ces deux technologies est que leurs APIs ne sont pas simples à utiliser et ne sont pas supportées par tous les navigateurs.
La sortie récente de localForage permet de contourner ces problèmes en unifiant les technologies (support de l'asynchrone et des blobs d'IndexedDB et Web SQL avec la syntaxe de localStorage) :
var settings = {color: 'black', font: 'Helvetica'};
localForage.setItem('settings', settings, function(result) {
console.log(result);
});
L'ajout du support d'IndexedDB et Web SQL permet aux applications web de stocker plus de données que localStorage seul aurait permis. La nature non bloquante de leurs APIs rend les applications web plus rapides en ne bloquant pas le processus principal sur les appels get/set. En plus, localForage supporte les callbakcs et les Promises ES6 laissant le choix de l'implémentation aux développeurs.
La bibliothèque charge et gère les pilotes pour IndexedDB, Web SQL et localStorage afin de ne pas avoir à le traiter manuellement (le meilleur pilote est choisi indépendamment du navigateur où l'application s'exécute). Si IndexedDB et Web SQL ne sont pas disponibles, localForage se replie sur localStorage donc au minimum les données basiques peuvent être stockées hors ligne (donc sans le support des blobs et plus lent).
Tous les navigateurs modernes sont supportés par localForage. Le stockage asynchrone est disponible dans tous les navigateurs suivants avec leurs versions qui supportent localStorage entre parenthèses :
- Navigateur Android 2.1
- BlackBerry 7
- Chrome 23 (Chrome 4.0 avec localStorage)
- Chrome pour Android 32
- Firefox 10 (Firefox 3.5 avec localStorage)
- Firefox pour Android 25
- IE 10 (IE 8 avec localStorage)
- IE Mobile 10
- Opera 15 (Opera 10.5 avec localStorage)
- Opera Mobile 11
- PhoneGap/Apache Cordova 1.2.0
- Safari 3.1