9
votes

Quelle est la manière la plus efficace dans JavaScript pour analyser d'énormes quantités de données d'un fichier

Quelle est la manière la plus efficace dans JavaScript pour analyser d'énormes quantités de données d'un fichier?

Actuellement, j'utilise JSON Payse pour sérialiser un fichier de 250 Mo non compressé, ce qui est vraiment lent. Existe-t-il un moyen simple et rapide de lire beaucoup de données dans JavaScript dans un fichier sans boucle à travers tous les personnages? Les données stockées dans le fichier ne sont que quelques tableaux de points flottants?

mise à jour: Le fichier contient un maillage 3D, 6 tampons (Vert, UV, etc.). De plus, les tampons doivent être présentés sous forme de tableaux dactylographiés. Le streaming n'est pas une option car le fichier doit être entièrement chargé avant que le moteur graphique puisse continuer. Peut-être qu'une meilleure question est de savoir comment transférer d'énormes tableaux dactylographiés d'un fichier à JavaScript de la manière la plus efficace.


2 commentaires

Dans le navigateur ou dans le nœud.js?


Pourquoi le fichier est-il si gros et pourquoi doit-il être le navigateur?


5 Réponses :


1
votes

Il n'y a pas de vraiment bon moyen de le faire, car tout le dossier va être chargé en mémoire et nous savons tous que tous ont de grandes fuites de mémoire. Pouvez-vous ne pas ajouter de pagination pour avoir visualisé le contenu de ce fichier?

Vérifiez s'il y a des plug-ins qui vous permettent de lire le fichier sous forme de flux, cela l'améliorera grandement.

mise à jour

http://www.html5rocks.com/fr/Tutorials/file/dndfiles /

Vous voudrez peut-être lire sur la nouvelle API HTML5 pour lire les fichiers locaux. Vous aurez le problème avec le téléchargement de 250 Mo de données toujours tho.


9 commentaires

"Nous savons tous que tous ont de gros fuites de mémoire"? [citation requise]


C'est ma propre citation, étant donné mon expérience :)


Mais cela vous aidera au cas où vous vous demanderiez: programmeurs .stackexchange.com / Questions / 173627 / ...


Votre expérience me semble assez étrange. Je ne fermai presque jamais chrome et son utilisation de la mémoire ne semble jamais devenir scandaleuse. Je penserais après quelques semaines, le navigateur vieillissait et mourrait de toutes ces "grosses fuites de mémoire". : P


Est-ce que ça? Hmm, peut-être que la version de chrome que vous utilisez est différente de tout le monde: produitforums.google.com/forum/?fromgroups#!Topic/chrome/...


Parfois, une simple requête Google aide à effacer tous les doutes: Google.ie/Search? q = chrome + mémoire + fuite


Le 250 Mo est le cas non compressé des cas. pas la taille de l'utilisateur à télécharger.


OK, mais toujours sans connaître vos besoins en entreprise, il tenterait d'ajouter "pagination" à ces données.


@Marco: Cela semble un peu moins que la coïncidence que Chrome s'est écrasé peu de temps après avoir cliqué sur votre lien ... :)



0
votes

Vous n'avez pas de chance sur le navigateur. Non seulement vous devez télécharger le fichier, mais vous devrez analyser le JSON, sans distinction. Analysez-le sur le serveur, rompez-le en plus petits morceaux, stockez ces données dans la DB et interrogez pour ce dont vous avez besoin.


0 commentaires

4
votes

Je recommanderais un analyseur basé sur la SAX pour ce type de JavaScript ou un analyseur à flux.

DOM analyse chargerait le tout en mémoire et ce n'est pas le moyen de passer par des fichiers volumineux tels que ceux mentionnés.

pour SAX analysant basé sur JavaScript (en XML) vous pourriez faire référence à https://code.google.com/p/jssaxparser/

et

pour JSON Vous pouvez écrire le vôtre, le lien suivant montre comment écrire un analyseur basé sur la SAX de base en JavaScript http://ajaxian.com/archives/javascript-sax-based-Parser


0 commentaires

1
votes

Avez-vous essayé de le coder à un binaire et de le transférer comme une blob?

https://developer.mozilla.org/en-us/ DOCS / DOM / XMLHTTPRÉQUEST / SENDING_AND_RECEIVER_BINARY_DATA

http://www.htmlgoodies.com/html5/tatudials/working-with-binary-files-utilisant-Le-javascript-filerader-.html#fbid=llhcrl0keb6


0 commentaires

1
votes

Je peux penser à 1 solution et 1 hack

solution: Extension de la division des données dans des morceaux: il se résume au protocole HTTP. Pièces de repos sur la notion selon laquelle HTTP a suffisamment de "langue" pour la plupart des scénarios client-serveur.

Vous pouvez configurer sur le client un en-tête de demande Content-LEN pour établir la quantité de données dont vous avez besoin par demande

puis sur le backend a quelques options http://httpstatus.es

  • Répondre A 413 Si le serveur est tout simplement incapable d'obtenir autant de données de la DB
  • 417 Si le serveur est capable de répondre mais non sous l'en-tête demandé (contenu-len)
  • 206 avec le morceau fourni, permet de connaître le client "Il y a plus d'où cela venait de"

    hack: Utilisez Websocket et obtenez le fichier binaire. Utilisez ensuite le HTML5 FILEAPI pour le charger dans la mémoire. Ceci est susceptible de manquer si ce n'est pas le téléchargement causant le problème, mais l'analyse d'un objet JS presque sans fin


0 commentaires