6
votes

Comment stocker 40 000 images à l'aide de HTML5 ou de PhoneGap?

J'ai cherché longtemps pour un moyen de stocker un grand nombre d'images en HTML5 ou d'y accéder localement et de les afficher.

L'application est une commande de produit et un catalogue, comme un site Web de commerce électronique, mais pour les commandes en vrac, pas les clients finaux, chaque image est un produit, c'est pourquoi il est nécessaire d'avoir 40K images. Le besoin provient de l'exigence selon laquelle le vendeur peut utiliser la tablette en mode hors connexion pendant des jours, des semaines et uniquement Sync avec l'ERP une fois qu'il a une connexion ou souhaite synchroniser.

Chaque vendeur a une tablette androide dédiée Tegra3 Quad-Core, 32 Go pour l'application. Mais l'application prend également en charge l'iPad et le chrome sur le bureau.

Cependant, j'ai fait face aux limitations suivantes:

  1. Utilisez HTML5 hors ligne (APP cache) - Ceci est limité dans les périphériques iOS à 50 Mo et difficile à gérer le fichier manifeste.
  2. Utilisez une base de données WebSQL avec des images codées de base64. Mêmes limitations de taille (50 Mo).
  3. Utilisez localCache avec base64, limitations de taille à nouveau (5 à 10 Mo).
  4. Convertissez mon application HTML5 pour utiliser l'API de fichier PhoneGap, mais je perds ensuite le support de bureau pour les PC Windows et avoir des problèmes avec les services Web.

    Alors peut-être que je manque une solution alternative de faire cela?

    Y a-t-il une façon HTML5 de stocker un grand nombre d'images pour la visualisation hors connexion? FileSystem API n'est pas pris en charge sur des appareils mobiles et la possibilité de fonctionner sur des appareils mobiles est une exigence forte.


4 commentaires

Pourquoi avez-vous besoin de sauvegarder toutes les images 40K? Les limitations que vous avez décrites sont là pour une raison - afin que les applications ne produisent pas le stockage d'un périphérique. Essayez de déformer la liste de manière dynamique, en fonction de ce que l'utilisateur a besoin pour voir hors ligne.


C'est un catalogue de produits Chaque produit dispose d'une image de 43 000 produits. C'est pourquoi j'ai besoin d'avoir les images 40K, question mise à jour pour refléter l'exigence.


C'est une idée horrible. Vous devez revenir à votre client et découvrir ce que les meilleurs vendeurs sont et cache ces images dans l'application. Sinon, chargez les images à distance si nécessaire.


@Simonmacdonald Tous les produits doivent être disponibles en mode hors connexion, c'est-à-dire le défi, il s'agit d'une application HTML5 qui vous permet d'effectuer des commandes hors ligne et de les envoyer une fois que vous avez une connexion. L'application doit fonctionner en mode hors connexion. L'application est déjà implémentée, seul le catalogue d'images manquait.


5 Réponses :


2
votes

7 commentaires

Je teste cette solution en ce moment. Le problème est qu'il ne fonctionne alors pas sur le bureau qui doit également être soutenu


De l'apparence de celui-ci, l'API Phonegap FS devrait être disponible avec la mise en œuvre des stocks de l'API FS, mise en œuvre par les navigateurs de bureau. Sinon, je créerais une très mince couche d'abstraction.


Merci pour vos commentaires, on dirait malheureusement que je n'aurai aucune autre alternative. Il est mal que je dois porter l'application à Phonegap, le WebSQL et WebServices, donc pas trivial ... craint que je ne trouve pas de manière pure HTML5 de faire cela. Mais je devais essayer d'appeler la communauté.


Je ne comprends pas bien pourquoi vous devez le porter. Tout ce dont vous avez besoin est une simple couche d'abstraction pour PhoneGap et l'API du système de fichiers HTML5. Je concevrais cette couche de manière plutôt élevée et ne pas essayer de résumer l'ensemble de l'API FS.


Je dois porter mon application HTML5 actuelle déjà en production depuis plus de 6 mois à PhoneGap, puis commencer le développement de cette phase du projet.


Ah maintenant je l'obtiens. J'ai mal interprété le titre de la question. J'étais sous l'hypothèse que vous avez déjà du projet téléphonique.


À l'époque HTML5 suffisait, maintenant qu'il est nécessaire de répondre à des exigences très spécifiques, il est nécessaire d'accéder à plus de ressources que celles disponibles dans HTML5.



0
votes

aléatoire cependant, feuille de sprite? ferait un seul fichier et minimiserait les demandes


2 commentaires

Bienvenue dans le débordement de la pile! Pouvez-vous élaborer votre réponse s'il vous plaît et donnez plus d'informations sur la façon de le faire et des avantages qu'il apporte?


J'ai vraiment pensé à cela. Cependant, il est nécessaire de référencer les images par nom et il n'est pas facile de les regrouper.




0
votes

Que diriez-vous d'exécuter un serveur Web local qui ne peut accepter que les connexions locales? Dans Apache, quelque chose comme "Autoriser à partir de 127.0.0.1" dans le fichier de configuration devrait faire le tour. Utilisation d'un serveur Web local Wold vous permet de contourner toutes les limitations HTML.


2 commentaires

Hum c'est quelque chose que je n'avais pas pensé à ... Mais pouvez-vous exécuter un serveur Web local sur une tablette iPad ou Android? Malade essayer de creuser cela un bit Depper, également malade de voir comment gérer cela sur le côté du client


Et aussi il y a la question de la mise à jour du serveur Web local avec de nouvelles images ... Nature et une option intéressante pour enquêter.



0
votes

Vous pouvez simplement le stocker dans votre base de données SQLite. Vous pouvez ajouter un champ de plus (colonne) à votre table de détail du produit.

Vous pouvez stocker l'image en format BLOB ou au format BASE64. (dans votre base de données).

Utiliser PhoneGap Vous pouvez facilement accéder à votre base de données et à différentes tables de votre DB.

Pour plus de performances et pour sauver la bande passante: Ce que vous pouvez faire, c'est que vous pouvez appliquer une chargement paresseux d'images. Lorsque vous téléchargez une nouvelle image, stockez simplement la base de données.

De cette façon, vous pouvez éviter les opérations d'E / S et également si vous utilisez MVC, alors dans l'objet de votre produit (classe modale), vous aurez également un objet d'image.

J'espère que cette suggestion fonctionne pour vous :)


0 commentaires