2011-06-17 4 views
2

Je place des valeurs JSON plus grandes dans ma couche de cache (redis), et je pense qu'elles pourraient utiliser une certaine compression pour réduire un peu mon utilisation de la mémoire.Compression dans node.js

Quels modules de compression pour node.js utilisez-vous? Pour une raison quelconque, tout ce qui est listé sur le wiki joyent/node Modules semble louche - soit 404s, pas de commits depuis plus d'un an, très peu de gens regardent, ou des rapports ouverts de fuites de mémoire.

Snappy semble bien, mais je préfère aller quelque chose de plus portable. Je préférerais naturellement une API de compression/décompression asynchrone plutôt qu'une API de blocage, mais je suis également curieux de savoir si cela fait une grande différence pour les faibles niveaux de compression.

Merci d'avance pour vos réponses!


EDIT:

A propos de la portabilité: ce que je voulais vraiment dire est que le module peut être installé via npm et n'a pas de dépendances externes qui ne sont pas présentes sur les configurations génériques * NIX. Pourquoi? Parce que certaines configurations PaaS (actuellement seulement celadon-cedar d'heroku à ma connaissance, mais peut-être plus dans le futur) ne fournissent pas l'accès administrateur traditionnel à l'environnement d'instance via ssh ou similaire, et la seule façon d'apporter des dépendances est via npm.

Idéalement, le module devrait également fonctionner sur cygwin.

Alors, que voulez-vous utiliser?

+2

utilisez [bison] (https://github.com/BonsaiDen/BiSON.js). – Raynos

+0

Vous cherchez à faire exactement la même chose. Curieux de savoir ce que vous avez finalement décidé. – AlexGad

Répondre

2

Lorsque vous dites 'plus portable', je suppose que vous faites référence au code C++ avec snappy. Malheureusement, une implémentation javascript native de la plupart des algorithmes de compression serait d'un ordre de grandeur plus lent qu'une implémentation C/C++ native, ce qui explique pourquoi presque toutes les bibliothèques de compression de nœuds l'utilisent. Snappy est extrêmement portable (je l'ai construit sur Solaris, Linux et OSX) et assez actif. Je le recommande fortement sur toute autre chose.

+0

Mise à jour: il y a quelques jours, l'auteur du module node-snappy incluait les sources de snappy-lib dans le npm, ce qui signifie qu'un simple "snappy install npm" apporte maintenant toutes les dépendances. – Hristo

1

Il existe des optimisations que vous pouvez essayer avant d'ajouter un surdébit de compression. Voir le documentation on memory optimization.

+0

Nous utilisons déjà des trucs comme des zipmaps et autres; Je me demande si le zipmap compresse aussi la représentation sérialisée des hachages, ou évite juste le surcoût de la garder non sérialisée en mémoire. Supposons que la meilleure chose à faire est de poser une nouvelle question ... ou d'exécuter un simple benchmark. – Hristo

+0

Mais il y a une autre chose qui est pertinente pour compresser des choses avant de les mettre dans la couche de mise en cache; comme mentionné [ici] (http://meta.stackexchange.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how) par exemple, la compression de valeurs de chaînes plus grandes avant de les envoyer pour la mise en cache augmente la débit réseau – Hristo