web-dev-qa-db-fra.com

J'ai besoin d'une base de données de navigateur côté client. Quelles sont mes options

Je crée un site Web qui, je pense, doit avoir une base de données côté client. L'autre option serait de coller tout sur le serveur au détriment d'une complexité accrue et d'une évolutivité réduite. Quelles options ai-je? Dois-je créer un plugin? Dois-je attendre que tout le monde soit compatible HTML5?


pdate Il y a eu beaucoup de commentaires sur la raison pour laquelle j'aurais réellement besoin de cela. Voici mes pensées. Dites-moi si je suis stupide:

  • Les clients auront un état vaste et complexe qui nécessitera quelque chose comme une base de données pour fournir l'interaction de données dont j'ai besoin. Par conséquent (je pense), les cookies sont exclus.
  • Ces données sont transitoires, donc le client ne se souciera pas si elles sont effacées dès la fermeture d'une session. Cependant, ils devront conserver les données s'ils se rendent sur une autre page Web, puis reviennent. Par conséquent (je pense), le stockage des données dans une sorte d'implémentation SQL javascript ne fonctionnera pas.
  • Je peux certainement faire tout ce que je veux faire sur le serveur et les serveurs can scale pour gérer la charge (Facebook). Mais (je pense) Je préfère construire un plugin plutôt que de payer l'infrastructure pour supporter cette charge. Ceci est pour un démarrage à nu. (Plus la startup est riche, plus mes os seront nus.)
44
JnBrymn
29
Šime Vidas

J'ai environ 5 ans de retard pour répondre à cette question, mais étant donné qu'il y a des erreurs et des données obsolètes dans certaines des réponses existantes, et des points non traités dans la question d'origine, j'ai pensé que je mettrais mes deux cents.

Tout d'abord, contrairement à ce que d'autres ont laissé entendre ici, localStorage n'est pas une base de données. C'est (ou devrait être perçu comme) un magasin de valeurs-clés persistant basé sur des chaînes ...

... qui peut parfaitement convenir à vos besoins (et m'amène à mon deuxième point).

  • Avez-vous besoin de relations explicites ou implicites entre vos éléments de données?
  • Qu'en est-il de la possibilité d'interroger lesdits éléments?
  • Ou plus de 5 Mo dans l'espace?

Si vous avez répondu "non" à toutes les réponses ci-dessus, utilisez localStorage et évitez les maux de tête que sont les API WebSQL et IndexedDB. Eh bien, peut-être juste le dernier mal de tête, car l'ancien a été déconseillé .

Il existe également plusieurs autres installations de stockage côté client (natives et non natives) que vous voudrez peut-être consulter, dont certaines sont obsolètes * mais continuent de bénéficier de la prise en charge de certains navigateurs:

Découvrez BakedGoods si vous souhaitez utiliser l'une de ces fonctionnalités, et plus encore, sans avoir à écrire de code d'opération de stockage de bas niveau. Avec lui, placer des données dans l'un (ou plusieurs) d'entre eux, par exemple, est aussi simple que:

bakedGoods.set({
    data: [{key: "key1", value: "val1"}, {key: "key2", value: "val2"}],
    storageTypes: ["silverlight", "fileSystem", "localStorage"],
    options: optionsObj,
    complete: function(byStorageTypeStoredKeysObj, byStorageTypeErrorObj){}
});

Oh, et dans un souci de transparence totale, BakedGoods est maintenu par ce gars ici :).

7
Kevin

Je suis tombé sur une base de données JavaScript http://www.taffydb.com/ toujours en train de l'essayer moi-même, j'espère que cela vous aidera.

5
DogBot

Si vous sentez que vous en avez besoin, utilisez-le pour les clients qui le prennent en charge et implémentez une solution de secours côté serveur pour les clients qui n'en ont pas.

Une alternative est que vous pouvez utiliser Flash et les objets partagés locaux qui peuvent stocker beaucoup plus d'informations qu'un cookie, fonctionnera dans tous les navigateurs avec Flash (qui est à peu près tous les navigateurs) et stockera des données tapées. Vous n'avez pas besoin de faire toute l'application dans Flash, vous pouvez simplement écrire un petit utilitaire pour lire/écrire des données LSO. Cela peut être fait en utilisant des projets ActionScript simples sans aucun cadre et vous donnera un petit swf de 5 à 15 Ko.

Il y a deux API dont vous aurez principalement besoin. SharedObject.getLocal() pour accéder à un LSO et lire/écrire ses données, et ExternalInterface.addCallback que vous pouvez utiliser pour enregistrer une méthode AS3 en tant que rappel pour appeler votre méthode LSO en lecture/écriture.

SharedObject

http://help.Adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2

Interface externe

http://help.Adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

Ces liens sont vers des références Flex mais pour cela, vous pouvez simplement créer un projet ActionScript sans avoir besoin du framework Flex et donc une taille swf considérablement réduite. Il existe un certain nombre de bons IDE, y compris ceux open-source gratuits comme FlashDevelop.

FlashDevelop

http://www.flashdevelop.org/

5
Samuel Neff

Si vous recherchez une base de données de style NoSQL sur le client, vous pouvez consulter http://www.forerunnerdb.com . Il prend en charge le même langage de requête que MongoDB et dispose d'un module de liaison de données si vous souhaitez que votre DOM reflète automatiquement les modifications apportées à vos données.

Il est également open source, est constamment mis à jour avec de nouvelles fonctionnalités et la communauté qui l'entoure se développe rapidement.

Avertissement, je suis le développeur principal du projet.

4
Rob Evans

Utilisez PouchDB .

Il aide à créer des applications qui fonctionnent en ligne et hors ligne.

Fondamentalement, il stocke les dernières données extraites dans la base de données du navigateur (utilise IndexedDB, WebSQL sous le capot), puis se synchronise à nouveau lorsque le réseau devient actif.

3
Dhruvdutt Jadhav

Découvrez le stockage local HTML5:

http://people.w3.org/mike/localstorage.html

Vous pouvez également trouver cela utile: stockage de base de données HTML5 (SQL Lite) - quelques questions

Lorsque Windows 98 est sorti pour la première fois, nous étions encore nombreux à être bloqués sur MS-DOS 6.22. Naturellement, il y avait des fonctionnalités vraiment cool sur le nouveau système d'exploitation qui ne fonctionneraient pas dans MS-DOS.

Il arrive un moment où certaines choses doivent être laissées pour faire place à l'innovation. Si votre application est vraiment innovante et offrira de nouvelles fonctionnalités intéressantes utilisant les technologies les plus récentes et les plus performantes, certains navigateurs plus anciens devront naturellement être laissés pour compte.

L'avantage que vous avez est que, contrairement à la mise à niveau d'un système d'exploitation, la mise à niveau d'IE7 vers Chrome 8 ou Firefox 3.6 est un objectif plus accessible pour l'utilisateur moyen de votre application, surtout si vous fournissez un lien et instructions de mise à niveau.

1
jmort253

J'essaierais localForage de Mozilla. https://mozilla.github.io/localForage/

1
Dmitry