2011-06-17 152 views
2

我把一些較大的JSON值在我的緩存層(Redis的),我認爲他們可以使用一些壓縮,以減少內存利用率一點。壓縮在node.js中

您使用哪種壓縮模塊爲node.js?出於某種原因,所有在joyent/node Modules wiki上列出的內容看起來都很腥 - 404s,沒有提交超過一年,很少有人觀看,或者公開報告內存泄漏。

Snappy看起來不錯,但我寧願去的東西更便攜。

我當然更喜歡異步壓縮/解壓縮的API通過阻斷一個,但我也是,如果你認爲它使低壓縮級別有很大的區別好奇。

在此先感謝您的答覆!


編輯:

關於便攜:我真正的意思是,該模塊可以通過npm安裝,沒有不存在於通用* NIX設置外部依賴。 爲什麼?由於某些PaaS的設置(目前僅Heroku的青瓷雪松據我所知,但也許在未來更多)不提供傳統的管理權限通過SSH或類似,唯一的方式實例環境依賴關係帶來的是通過npm

理想的情況下,該模塊還應該在Cygwin上運行。

那麼你會用什麼?

+2

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

+0

尋找完全一樣的東西。好奇你最後決定了什麼。 – AlexGad

回答

2

當你說「更輕便」我假設你指的是與活潑的C++代碼。不幸的是,大多數壓縮算法的原生JavaScript實現比原生C/C++實現慢一個數量級,這就是幾乎所有節點壓縮庫都使用它的原因。 Snappy非常便攜(我已經將它構建在Solaris,Linux和OSX上)並且非常活躍。我會強烈推薦它。

+0

更新:幾天前node-snappy模塊的作者在npm中包含了snappy-lib的源代碼,這意味着一個簡單的'npm install snappy'現在引入了所有的依賴關係。 – Hristo

1

在添加壓縮開銷之前,您可以嘗試優化。請參閱documentation on memory optimization

+0

我們已經在使用像zipmaps之類的東西;我想知道zipmap是否也壓縮哈希的序列化表示,或者它只是避免了在內存中保持非序列化的開銷。猜猜要做的最好的事情是提出一個新的問題......或者運行一個簡單的基準測試 – Hristo

+0

但還有另一件事是在把東西放入緩存層之前進行壓縮的;正如前面提到的[這裏](http://meta.stackexchange.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how)例如,在發送緩存之前壓縮較大的字符串值會增加網絡吞吐量 – Hristo